2017-07-14 28 views
1

這裏是我的代碼,每當我在文本框中輸入,然後再出現錯誤按下按鈕時:SQLEXCEPTION中的ExecuteNonQuery

SQLEXCEPTION是未處理的,列名或提供值的數目不匹配表定義

請幫

private void button1_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=XXYZZ\SQLEXPRESS;AttachDbFilename=C:\Users\trist\Documents\Invent.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;"); 

    SqlCommand cmd = new SqlCommand ("Insert into tblLogin values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

    con.Open(); 
    int i = cmd.ExecuteNonQuery(); 
    con.Close(); 

    if (i > 0) 
    { 
     MessageBox.Show("Registered"); 
    } 
    else 
    { 
     MessageBox.Show("HEHE"); 
    } 
} 
+6

你錯過了一個','在你傳遞的兩個值之間!注意sql注入 –

+1

你應該真的使用[Using Statement](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement)。 –

回答

2

您插入SQL,其中必須用逗號分隔的兩個列值,但也沒有了:

// your incorrect SQL query: 
SqlCommand cmd = new SqlCommand ("Insert into tblLogin values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

但不是固定這個,你應該開始使用參數化查詢f.e.防止SQL注入:

SqlCommand cmd = new SqlCommand ("Insert into tblLogin values (@user, @password)",con); 
cmd.Parameters.Add("@User", SqlDbType.VarChar).Value = txtUsername.Text; 
cmd.Parameters.Add("@Password", SqlDbType.VarChar).Value = txtPassword.Text; 

你也應該使用using語句實現IDisposable像連接和命令的一切。就這樣你就是f.e.即使發生異常,也要確保連接處理/關閉(重要)。

+0

此外,我建議* always *明確指定要插入數據的表的列。有助於避免不必要的意外和麻煩 –

-1

你錯過了一個逗號(,

更好地之間
values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

指定的列名。

INSERT INTO MyTable(Column1, Column2) 
VALUES (Value1, Value2), (Value1, Value2)