尝试执行代码时收到错误消息

时间:2014-02-04 07:23:06

标签: c# sql sqlcommand

con.Open();
string qry="insert into reg1 values ('"+txtname.Text+"','"+txtaddress.Text+"','"+txtpin.Text+"','"+txtage.Text+"','"+txtgender.Text+"','"+txtcourse.Text+"','"+txtcollege.Text+"','"+txtfname.Text+"','"+txtoccup.Text+"','"+txtmname.Text+"','"+txtskills.Text+"','"+txtmobile.Text+"','"+txtemail.Text+"')";
SqlCommand cmd = new SqlCommand(qry, con);
cmd.ExecuteNonQuery();
con.Close();

我尝试执行此代码时收到以下错误消息:

  

列名或提供的值与表定义不匹配。

任何人都可以帮我找到错误吗?

2 个答案:

答案 0 :(得分:5)

听起来您的表格中的列号与SqlCommand不匹配。但由于我们对你的桌子设计一无所知,我们永远都不知道..

如果您的INSERT命令与您的表没有相同的列号,则必须声明要插入这些值的列名。

我在您的桌子上计算了14列 from your comment ,但您尝试添加13个值。这些都不匹配。

但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。

con.Open();
string qry = @"insert into reg1
               values(@name, @address, @pin, @age, @gender, @course, @college, @fname
               @occup, @mname, @skills, @mobile, @email)";
SqlCommand cmd = new SqlCommand(qry, con);
cmd.Parameters.AddWithValue("@name", txtname.Text);
cmd.Parameters.AddWithValue("@address", txtaddress.Text);,
.....
cmd.ExecuteNonQuery();
con.Close();

答案 1 :(得分:1)

您在表格中输入了很多或很少的值,换句话说,您的表格有5列,您输入了6个值或4,检查您输入的值是否与您的表格相对应

我能给出的最佳建议是总是使用一个程序建议防止sql注入,它会减少发生这种情况的机会,它也比从c#end硬编码更有效率

创建一个proc并从c#end done中调用它;)

SQL Server stored procedure beginner's guide

     create proc example_insert
     @values varchar(100) <--- declare  parameters

     as 

     insert into [Table]([Column],[Column],[Column])
     values('','','',)<--- -this should be the same number as your columns

调用存储过程这是在vb中,但原理是相同的

        s1.Open() 'opens the connection
        Dim cmd As New SqlCommand("example_insert", s1)

        cmd.CommandType = CommandType.StoredProcedure


        cmd.Parameters.AddWithValue("@Value", textbox.Text)<--- a lot simpler