ExecuteNonQuery中的SqlException

时间:2017-07-14 09:09:45

标签: c# database

这是我的代码,只要我在文本框中输入然后单击按钮,就会出现错误:

  

未处理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");
    }
}

2 个答案:

答案 0 :(得分:2)

您的插入SQL有两个列值,必须用逗号分隔,但没有:

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

但是不应该修复它,你应该开始使用参数化查询,例如。防止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.即使出现异常,也要确保连接处于/关闭(重要)。

答案 1 :(得分:-1)

您错过了

之间的逗号(,
values ('"+ txtUsername.Text + '"'+ txtPassword.Text + "')",con); 

最好指定列名。

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