查询值的数目与目标字段中的数目不同
本人第一次用Access和OleDbHelper.cs我做了个insert报的错误是“查询值的数目与目标字段中的数目不同”,我反复数了一下,我的参数和数据库了的字段是一样的啊?下面是我的代码大家帮着找找吧!
private void InsertCustomer(string customerName, string password, string realityName,string Province,string City, int customerType, string units, string photo, string duty, string attention, string email, int item)
{
string strSQL = "INSERT INTO CustomerTable VALUE('"+customerName+"','"+password+"','"+realityName+"','"+Province+"','"+City+"',"+customerType+",'"+units+"','"+photo+"','"+duty+"','"+attention+"','"+email+"',"+item+")";
OleDbHelper.ExecuteNonQuery(OleDbHelper.JetConnectionString,CommandType.Text,strSQL);
} --------------------编程问答-------------------- 数据库字段:
CustomerTPKID 自动编号
CustomerName 文本
Password 文本
RealityName 文本
Province 文本
City 文本
CustomerType 数字
Units 文本
Photo 文本
Duty 文本
Attention 文本
Email 文本
Item 数字 --------------------编程问答-------------------- 可能因为自动编号,你老老实实用(CustomerName,....) Values(......)试试 --------------------编程问答-------------------- string strSQL = "INSERT INTO CustomerTable VALUE //应该是values吧
--------------------编程问答-------------------- InsertCustomer(1,"a","aa","asdf","asdf","asdf",1,"asdf","asdf","asdf","asdf","asdf",1);
我这样调用方法都可以写入到数据库,前面CustomerTPKID 的字段我也给了一个值,就好用,可是我不给值就报错。应该怎么调啊? --------------------编程问答-------------------- 我用的是 values 让我该过来了 --------------------编程问答-------------------- 我这么写说我“INSERT INTO 语句的语法错误。”
string strSQL = "insert into CustomerTable (CustomerName,Password,RealityName,Province,City,CustomerType,Units,Photo,Duty,Attention,Email,Item) VALUES ('"+customerName+"','"+password+"','"+realityName+"','"+Province+"','"+City+"',"+customerType+",'"+units+"','"+photo+"','"+duty+"','"+attention+"','"+email+"',"+item+")"; --------------------编程问答-------------------- 在access里面Password是关键字,不能用来作字段, --------------------编程问答-------------------- 好像不是 我也烦着毛病 现在还没改过来呢 什么关键字啊 我都检查了 自动编号也改成数字 可还是有这毛病 --------------------编程问答-------------------- 有一点不要忽略了,你字段间和数据间的逗号要保证是英文输入法下的。“,”“,”这两个符号在vs 编辑器里差别很小。 --------------------编程问答--------------------
string strSQL ="insert into CustomerTable(CustomerName,Password,RealityName,Province,City,CustomerType,Units,Photo,Duty,Attention,Email,Item) values( '"+customerName+ " ', '"+password+ " ', '"+realityName+ " ', '"+Province+ " ', '"+City+ " ', '"+customerType+ ",'"+units+ " ','"+photo+ " ', '"+duty+ " ', '"+attention+"')";
' "+City+ " ', "+customerType+ ", ' 还有values('"++"','"++"') values和() 之间不要有空格
"+cust 前面少了个' 楼主要细心检查。向这种字段比较多建议 分开写 比较清晰
string strSQL = "insert into CustomerTable(CustomerName,Password,RealityName,Province,City,CustomerType,Units,Photo,Duty,Attention,Email,Item)";--------------------编程问答-------------------- 突然发现我也出了这么一个问题,楼主的这个问题用几位高手的说法详细检查了一通,都没问题,可是就是insert不了.出错情况和楼主一样,就把这个帖子顶起来,期待高手再次解决 --------------------编程问答-------------------- 我是因为数据库中的列名跟系统有冲突了,比如我的时间列设置为了:time,这样,他就报跟你同样的错误,我刚研究出来,希望对你有用! --------------------编程问答-------------------- 我想知道,用insert时,有些textbox中的数据为空(在数据库中允许为空),再用OleDb\sqlCommand(实例化一个对象).ExecuteNonQuery()方法时,为什么也出现楼主的错误,也就是说用.ExecuteNonQuery()方法不能部分数据插入数据库吗? --------------------编程问答-------------------- 顶(大漠风宝)一般出现中英文字符切换的时候,不论是文字还是标点符号,如果选成中文的,也会出现这种提示,最好重点检查一下这些方面 --------------------编程问答-------------------- 其实是这样的,你如果在写insert语句是省略的话要看一下你的资料是否与表中字段数目相同,位置对应的。
strSQL+=" values( '"+customerName+ " ', '"+password+ " ', '"+realityName+ " ', '"+Province+ " ', '"+City+ " ', '"+customerType+ ",'"+units+ " ','"+photo+ " ', '"+duty+ " ', '"+attention+"')";
如果还不行的话就不要省略了把字段也加上INSERT INTO CustomerTable(字段……)VALUES,你的字段CustomerTPKID设置为自动累加的吗?是不是可以为空呢?
如果是累加的话,还有错的话可能这种累加字段不能省略了。 --------------------编程问答-------------------- 可以是SQL语句的问题,好好看看,如标点符号,和引号 要是中文的,打段点看,把SQL拿到数据库中运行一下看哪出错了 --------------------编程问答-------------------- LZ解决了吗?? --------------------编程问答-------------------- 出错原因:
数据库表中的实际列数和sql插入语句中插入的列数不一致造成的。
例如:表A中有三个字段(aaa int,bbb int,ccc int)
而插入写成如下时:insert into A values(111, 222)时程序会报该错误提示。
只需改为:insert into A values(111, 222, 333)即可。 --------------------编程问答-------------------- 我刚刚也碰到了这个问题,和你说的一模一样,我发现是我将语句中的一个逗号打成了中文的,这些细小的问题很容易出现,你还是好好检查下语句,还有,即使有些字段不设成自动编号或系统自定(比如说时间字段,我将默认值设成了Now()),也可以在写语句时不写而插入一条记录(我刚开始以为这才是查询值得数目与目标字段不对应,但事实上这样反而行)。
这个是我的语句
string sql = string.Format("insert into news_info(分类编号,标题,来源,内容) values({0},'{1}','{2}','{3}')", DropDownList1.SelectedValue, TextBox2.Text.Trim(), TextBox3.Text.Trim(), myEditor.Text.Trim());
这个是我的数据库
编号 自动编号
分类编号 数字
标题 文本
日期 日期/时间
来源 文本
内容 备注
点击数 数字
很明显我的语句李没有点击数这个字段,但成功了 --------------------编程问答-------------------- 。。。。 --------------------编程问答-------------------- 9楼正解 --------------------编程问答-------------------- 汗,你那符号错误了这是最不该的呀 --------------------编程问答-------------------- 哎。。。这年头。。。标点符号都不干出错,,,我也是9楼那原因。。
补充:.NET技术 , ASP.NET