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();
我尝试执行此代码时收到以下错误消息:
列名或提供的值与表定义不匹配。
任何人都可以帮我找到错误吗?
答案 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