A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏桓基 初级黑马   /  2014-5-8 22:24  /  1488 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

INSERT 语句中列的数目小于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: INSERT 语句中列的数目小于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配。

源错误:


行 196:                        SqlCommand ST_myCmd = new SqlCommand(ST_sql,ST_myConn);
行 197:                        ST_myConn.Open();
行 198:                    ST_myCmd.ExecuteNonQuery();
行 199:                        ST_myConn.Close();
行 200:                        ST_add_Re();

源文件: d:\TestWeb\myBLog\ST_show.aspx.cs    行: 198
源代码
        protected void replay_Click(object sender, System.EventArgs e)
                {

            string conStr = "Server=(local);DataBase=db_Blog;uid=sa;pwd=Aa123456";
            ST_myConn = new SqlConnection(conStr);
                        if (Page.IsPostBack)
                        {
                                if (r_nick.Text.Trim()== "" || r_title.Text.ToString().Trim()== "" || r_content.Value.Trim()== "")
                                {
                                        Response.Write("<div align=center><li>昵称,标题,内容不能为空!</li><li><a href=javascript:history.back()>点此返回</a>");
                                        Response.End();
                                }
                else
                    {
                       string ST_sql = "insert into ST_replay (ST_r_nick,ST_r_title,ST_r_content,ST_r_date,ST_n_id) values ('"+ r_nick.Text +"','"
                                    + r_title.Text +"','"+ r_content.Value +"','"+System.DateTime.Now +"',"+Request.QueryString["id"]+")";
                        SqlCommand ST_myCmd = new SqlCommand(ST_sql,ST_myConn);
                        ST_myConn.Open();
                    ST_myCmd.ExecuteNonQuery(); //错误处
                        ST_myConn.Close();
                        ST_add_Re();
                    Response.Redirect(""+Request.QueryString["id"]+".aspx");
                     }
                               
                        }
               
                }
为什么我明明INSERT 语句中列的数目等于 VALUES 子句中指定的值的数目却提示说不相等。。。

7 个回复

倒序浏览
大哥,你看你的ST_sql字符串拼写的正确?你在那设个断点看一下这个字符串是什么,拼错了。。。
回复 使用道具 举报
panwenbo1990 发表于 2014-5-8 22:45
大哥,你看你的ST_sql字符串拼写的正确?你在那设个断点看一下这个字符串是什么,拼错了。。。 ...

我可以肯定我的书写是没有问题的。。。
回复 使用道具 举报
你这也挺麻烦的,你在拼接SQL语句的下一条语句弄个断点,运行,将你拼接的SQL语句拷贝到SQL Server中去执行以下看看,什么结果,特别是你从前台请求中获取到的那个ID看看有没有值
回复 使用道具 举报

这个问题是你数据库中的字段的个数与你代码中设置参数的个数不统一,不同意会导致你在操作数据库的增或修改都会出错。解决方法】1:先检查你的sql语句的参数的个数是不是与数据库中字段的个数相同
2:看数据库中歌字段的英文的大小写是不是与你数据访问层中的参数的相一致(最好是数据库中的字段复制到失去了、的操作语句中,通常在写数据库操作的时候大多都是手动写的,这个难免会将大小写写错或多写或漏写)
3:设置断点看详细的错误地点。


回复 使用道具 举报
continue  发表于 2014-5-9 08:54
你这也挺麻烦的,你在拼接SQL语句的下一条语句弄个断点,运行,将你拼接的SQL语句拷贝到SQL Server中去执行 ...

是的,Request.QueryString["id"]这个没有获取到值?请问该如何解决?
回复 使用道具 举报
魏桓基 发表于 2014-5-10 08:41
是的,Request.QueryString["id"]这个没有获取到值?请问该如何解决?

这个是前台页面请求的时候,没有传递过来,你应该是将ID存在session或者cookie中的,你先看看页面请求的方式和你获取值的这个方法是不是匹配,
在插入数据库的时候先判断有没有值,有值才进行插入,没得值就直接返回了
回复 使用道具 举报
Request.QueryString["id"] 这样取 你前台是怎么发的 ?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马