C# ExecuteOnQuery中的SqlException

C# ExecuteOnQuery中的SqlException,c#,database,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.m

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

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

insert 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;

对于实现
IDisposable
的所有内容,如连接和命令,也应该使用
using
语句。通过这种方式,您可以确保即使在出现异常的情况下,连接也会被释放/关闭(重要)。

您的insert 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;
对于实现
IDisposable
的所有内容,如连接和命令,也应该使用
using
语句。通过这种方式,您可以确保即使在出现异常的情况下,连接也会被释放/关闭(很重要)。

您遗漏了一个逗号(

最好指定列名

INSERT INTO MyTable(Column1, Column2) 
VALUES (Value1, Value2), (Value1, Value2)
您缺少一个逗号(

最好指定列名

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

您在传递的两个值之间遗漏了一个
!当心sql注入,你应该真正利用它。你在传递的两个值之间错过了一个
!当心sql注入,您应该真正利用它。此外,我建议您始终明确指定要将数据插入的表的列。有助于避免不必要的意外和麻烦。此外,我建议始终明确指定要将数据插入的表的列。有助于避免不必要的意外和麻烦