2013-12-13 27 views
0
 private void Button1Click(object sender, EventArgs e) 
    { 
     var dt = new DataTable(); 
     const string Connectionstring = "Data Source=GARETH-PC1;Initial Catalog=Genres;Integrated Security=True"; 
     using (var con = new SqlConnection(Connectionstring)) 
     { 
      con.Open(); 
       var query = "Select Username From Login Where Username ='" + ComboBox1.SelectedText + "' Password ='" + textBox2.Text + "'"; 
       using (var sda = new SqlDataAdapter(query, con)) 
       { 

       sda.Fill(dt); 
      } 

     } 

     if (dt.Rows[0].ItemArray.GetValue(0).ToString() == "1") 

     { 
      Hide(); 

      var ss = new Main(); 
      ss.Show(); 
     } 
     else 
     { 
      MessageBox.Show("Invalid Username or Password"); 
     } 
    } 

if(dt.Rows [0] .ItemArray.GetValue(0).ToString()==「1」) - 返回一個錯誤,表示表中沒有任何內容......但有一些建議?Win Form登錄中的錯誤

+0

你是如何認定你有記錄的? – Steve

+0

抱歉編程新手。 – user3099540

+0

我有SQL表設置,與測試用戶名放在裏面的columts。 - 但是當我運行調試器時,它發現了表,但裏面沒有任何東西。 – user3099540

回答

0

也許你可以嘗試這樣的:

dt.Rows[0]["ColumnName"].ToString() 

這是爲我工作。

+0

無法將字符串轉換爲布爾是我得到的錯誤 – user3099540

+0

我的意思是:if(dt.Rows [0] [「ColumnName」]。ToString()==「1」){...} –

0

我會以這種方式更改您的代碼。 首先,改變一個參數化查詢,而不是一個字符串連接(SQL注入和解析) 其次,使用count屬性來檢查,如果你已經找到了記錄或不

private void Button1Click(object sender, EventArgs e) 
{ 
    var dt = new DataTable(); 
    const string Connectionstring = "Data Source=GARETH-PC1;Initial Catalog=Genres;Integrated Security=True"; 
    var query = "Select Username From Login Where Username [email protected] AND [email protected]"; 
    using (var con = new SqlConnection(Connectionstring)) 
    using (var cmd = new SqlCommand(query, con) 
    { 
     con.Open(); 
     cmd.Parameters.AddWithValue("@uname", ComboBox1.SelectedText); 
     cmd.Parameters.AddWithValue("@pwd", textBox2.Text); 
     using (var sda = new SqlDataAdapter(cmd)) 
     { 
      sda.Fill(dt); 
     } 
    } 
    if (dt.Rows.Count > 0) 
    { 
     Hide(); 

     var ss = new Main(); 
     ss.Show(); 
    } 
    else 
    { 
     MessageBox.Show("Invalid Username or Password"); 
    } 
} 

作爲一個側面說明,它是以純文本形式在數據庫中存儲密碼的一個非常糟糕的主意。您應該考慮使用HASH並將其存儲,而不是簡單的密碼。

+0

上面這行代碼不起作用,只是給了我錯誤。 – user3099540

+1

如果您說出確切的錯誤信息,我可以幫助您。 – Steve

+0

真的是一個壞主意,用相同的問題大量淹沒網站。你有被禁止的風險。但是這是一部分。如果您按照我所做的完全鍵入它,則在其他問題中提到的語法錯誤不應出現在上面的查詢中。嘗試使用調試器,在此方法的初始化處放置一個斷點,然後逐步執行,直到您遇到異常並在每次傳遞時驗證使用的值和字符串。程序員最重要的素質之一就是耐心。 – Steve