【问题标题】:Getting error message when trying to execute code [duplicate]尝试执行代码时收到错误消息[重复]
【发布时间】:2014-02-04 07:23:06
【问题描述】:
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();

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

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

谁能帮我找出错误?

【问题讨论】:

  • 您收到哪条错误消息?
  • 列名或提供的值的数量与表定义不匹配。
  • 那么表定义是什么?
  • 请同时使用(column name) ...或检查您已获取的值的数量和db中的字段数
  • cid int 未检查 name varchar(20) 检查地址 varchar(20) 检查 pin varchar(20) 检查年龄 varchar(20) 检查性别 varchar(20) 检查课程 varchar(20) 检查大学 varchar( 20) 检查 fname varchar(20) 检查职业 varchar(20) 检查 mname varchar(20) 检查技能 varchar(20) 检查 mobile varchar(20) 检查 email varchar(20) 检查

标签: c# sql sqlcommand


【解决方案1】:

听起来您表格中的列号与您的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();

【讨论】:

    【解决方案2】:

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

    我能给出的最佳建议是始终使用推荐的程序来防止 sql 注入,这将减少发生这种情况的机会,它也比从 c# 端硬编码更有效

    创建一个 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 
    

    【讨论】:

    • 如果需要进一步的帮助,将您的表格编写成查询并发布
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2013-08-13
    相关资源
    最近更新 更多