2017-05-14 257 views
0

我試圖從MySql服務器驗證用戶名和密碼。登錄驗證正在發揮作用,但我不能爲了我的生活找出爲什麼「創建新用戶」驗證不起作用。ASP.NET C#驗證用戶名和密碼

以下是註冊新用戶的代碼。會發生什麼事;

catch (Exception) 
    { 
     Label1.Text = "Brukernavnet er allerede i bruk"; 
    } 

看起來這部分^是破壞它,我不知怎麼的,每當我試運行此代碼,我得到這個消息。

protected void newBtn_Click(object sender, EventArgs e) 
    { 
     String cs = "Database=trafikkskole; User=user; Password=password"; 
     MySqlConnection dbconnect = new MySqlConnection(cs); 

     try 
     { 

      dbconnect.Open(); 
      cmd.CommandText = "INSERT INTO user (username, password) VALUES (@un, @pw)"; 
      cmd.Parameters.AddWithValue("@un", inputUser.Text); 
      cmd.Parameters.AddWithValue("@pw", inputPw.Text); 
      cmd.Connection = dbconnect; 
      int a = cmd.ExecuteNonQuery(); 

      if (a > 0) 
      { 
       Label1.Text = "Gratulerer! Du har nå laget en bruker!"; 
      } 

      else 
      { 
       Label1.Text = "ERROR"; 
      } 

     } 

     catch (Exception) 
     { 
      Label1.Text = "Brukernavnet er allerede i bruk"; 
     } 

     finally 
     { 
      dbconnect.Close(); 
     } 
    } 

} 

編輯:

如果我試着這樣說:

protected void newBtn_Click(object sender, EventArgs e) 
    { 
     String cs = "Database=trafikkskole; User=root; Password=root"; 
     MySqlConnection dbconnect = new MySqlConnection(cs); 

     String sql = "SELECT * FROM user"; 
     MySqlCommand cmd = new MySqlCommand(sql, dbconnect); 
     da = new MySqlDataAdapter(cmd); 
     MySqlCommandBuilder cb = new MySqlCommandBuilder(da); 
     ds = new DataSet("TEST"); 
     da.Fill(ds, "user"); 
     Response.Write(ds.Tables["user"].Rows.Count);  

     try 
     { 

      dbconnect.Open(); 
      cmd.CommandText = "INSERT INTO user (username, password) VALUES (@un, @pw)"; 
      cmd.Parameters.AddWithValue("@un", inputUser.Text); 
      cmd.Parameters.AddWithValue("@pw", inputPw.Text); 
      cmd.Connection = dbconnect; 
      int a = cmd.ExecuteNonQuery(); 

      if (a > 0) 
      { 
       Label1.Text = "Gratulerer! Du har nå laget en bruker!"; 
      } 

      else 
      { 
       Label1.Text = "ERROR"; 
      } 

     } 



     catch (Exception Exception) 
     { 
      Label1.Text = "Brukernavnet er allerede i bruk"; 

     } 

     finally 
     { 
      dbconnect.Close(); 
     } 
    } 

} 

這與使用戶無需用戶名或密碼的可能性結束。

+0

請問您可以使用您的例外日誌進行編輯。比如'catch(Exception ex) {Debug.Writeline(ex.ToString()); }' – amarnath

+0

如果你試圖捕獲插入的結果,而不是把'int a = cmd.ExecuteNonQuery();'嘗試用'int a = cmd.ExecuteScalar();' – Flxtr

+0

@amarnath 我唯一可能產生的是: CS0169字段'login.da'從不使用。 CS0169字段'login.ds'從不使用。 CS0169字段'login.cb'從不使用。 –

回答

0

有很多事情可能會出錯。您應該檢查exception.message以獲取有關它的可能性的見解。

例如,在catch語句中放置一個斷點,並查看是否拋出異常(例如...)用戶名已存在,並且SQL引發錯誤。 ...或者是用戶名/密碼爲空,太長等...

無論如何,將catch語句更改爲catch(Exception exception)並查看例外情況。

+0

數據庫目前只有一個用戶,並且不管我輸入什麼信息都會彈出此消息。 –

+0

這是發生了什麼事情: CS0168 C#聲明變量'Exception'但從未使用 –

+0

我認爲這不是錯誤消息,這是一條警告消息。 – shinjidev

0

我想感謝大家的努力,找到一個工作解決方案,將它發佈在這裏供將來參考。

protected void newBtn_Click(object sender, EventArgs e) 

     { 
     String cs = "Database=trafikkskole; User=root; Password=root"; 
     MySqlConnection dbconnect = new MySqlConnection(cs); 

     try 
     { 

      if (!string.IsNullOrWhiteSpace(inputUser.Text) && !string.IsNullOrWhiteSpace(inputPw.Text)) 
      { 
       dbconnect.Open(); 
       Label1.Text = "Gratulerer! Du har nå laget en bruker!"; 
       string qry = "INSERT INTO user(username, password) VALUES (@un, @pw)"; 
       cmd = new MySqlCommand(qry, dbconnect); 
       cmd.Parameters.AddWithValue("@un", inputUser.Text); 
       cmd.Parameters.AddWithValue("@pw", inputPw.Text); 
       cmd.Connection = dbconnect; 
       cmd.ExecuteNonQuery(); 
      } 

      else 
      { 
       Label1.Text = "ERROR"; 
      } 

     } 

     catch (Exception) 
     { 
      Label1.Text = "Brukernavnet er allerede i bruk"; 

     } 


     finally 
     { 
      dbconnect.Close(); 
     } 
    }