2013-12-13 102 views
0

當過我嘗試登錄它拋出了未處理的異常是由於comboBox1是控制未處理的異常是控制

有人能告訴我如何解決這一問題?

我正在製作ComboBox1,因爲我想要一個帶有用戶名的下拉列表。

但它爲了驗證用戶名和密碼它必須在組合框中選擇用戶名+密碼如果密碼匹配到用戶名=允許登錄。

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 + "' and 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"); 
    } 
} 
+0

它沒有工作。如果(dt.Rows [0] .ItemArray.GetValue(0).ToString()==「1」) - 確保數據柱是正確的。 此外,這個程序是用於室內使用,所以只有少數人可以訪問它,所以它不是公開的。 – user3099540

回答

1

在這一行:

var query = "Select Username From Login Where Username ='" + comboBox1 
    + "' and Password ='" + textBox2.Text + "'"; 

你試圖連接一StringControl在一起。 (ComboBoxControl的子類)這是不允許的。你需要使用什麼是ComboBoxSelectedText屬性:

var query = "Select Username From Login Where Username ='" + comboBox1.SelectedText 
    + "' and Password ='" + textBox2.Text + "'"; 

順便說一句,我會強烈建議使用準備語句,以確保用戶不會輸入自己的SQL代碼到用戶名和密碼字段,並有可能危及數據庫的安全。這通常涉及使用參數名稱(val0,val1等)而不是原始文本comboBox1.SelectedText,textBox2.Text來設置查詢字符串。

在Microsoft SQL準備語句的信息:在MySQL預處理語句上http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare(v=vs.110).aspx

信息:http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-prepared.html

+1

請鼓勵OP使用參數來避免SQL注入。如果用戶名是O'Brien,它也可以解決問題。 – LarsTech

+0

添加了相關鏈接並簡要說明了問題。 –