问题描述
在命名空间:win1中有一段如下程序......privatevoidadd_Click(objectsender,System.EventArgse){fo2=newwin2();fo2.ShowDialog();if(fo2.jilu==0){try{this.constr.Open();OleDbCommandcom2=newOleDbCommand(fo2.str,constr);com2.ExecuteNonQuery();this.constr.Close();shuaxin();}catch(OleDbExceptione4){this.constr.Close();MessageBox.Show("你没有增加任何数据!"+e4.ToString());}}}......第二段(同一个命名空间中的不同窗本):privatevoidadd_Click(objectsender,System.EventArgse){a=this.tbdep.Text;b=this.nametb.Text;c=this.iptb.Text;d=this.infoli.Text;if(b==""||c==""||d==""||a==""){MessageBox.Show("请检查,数据没填完整!");}else{str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";MessageBox.Show("增加数据成功!"+str.ToString());}jilu=0;}...现在用的ACCESS数据库,报说我的SQL有语法错误!我用SQL2000就没得这个问题,而且是同样的程序!
解决方案
解决方案二:
是不是+"' 这个中间有空格的原因?改一下,去掉空格str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";
解决方案三:
试一试这么写:privatevoidadd_Click(objectsender,System.EventArgse){a=this.tbdep.Text.Replace("'","''");b=this.nametb.Text.Replace("'","''");c=this.iptb.Text.Replace("'","''");d=this.infoli.Text.Replace("'","''");if(b==""¦¦c==""¦¦d==""¦¦a==""){MessageBox.Show("请检查,数据没填完整!");}else{str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";MessageBox.Show("增加数据成功!"+str.ToString());}jilu=0;}
解决方案四:
是不是用了什么关键字做字段名,或者是标点用的中文输入法输入的,我以前就写错过
解决方案五:
建议使用参数化的方法,不要再拼SQL了,一个容易错,另外一个在数据库不同时还需要从写SQL代码.
解决方案六:
上面几位的方法都试过了,但还是没解决到问题!
解决方案七:
解决方案八:
错误信息是:System.Data.OleDb.OleDbException:Insertinto语句的语法错误.atSystem.Data.OleDb.Command.ExecteCommandTextErrorHanding(Int32hr)atSystem.Data.OleDb.Command.ExecteCommandTextForSingleResult(tagDBPARAMSdbParams,Object&executeResult)atSystem.Data.OleDb.Command.ExecteCommandText.....
解决方案九:
是否是表字段类型不匹配,或字段个数不对,或者插入字串长度过长。
解决方案十:
sqlserver2000和Access数据库的语法格式,有些是不一样的,比如,你在sqlserver2000里可以insert一个int型字段用引号inserttables(aa)values('9'),但是在access中可能不能要引号。你可以在access中建立一个sql查询,类似sqlserver2000的查询分析器,来帮助你分析sql语法错误!
解决方案十一:
privatevoidadd_Click(objectsender,System.EventArgse){a=this.tbdep.Text.Replace("'","''");b=this.nametb.Text.Replace("'","''");c=this.iptb.Text.Replace("'","''");d=this.infoli.Text.Replace("'","''");if(b==""¦¦c==""¦¦d==""¦¦a==""){MessageBox.Show("请检查,数据没填完整!!");}else{str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";MessageBox.Show("增加数据成功!"+str.ToString());}jilu=0;}应当就好用了试一试!
解决方案十二:
str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";'"+a+"'右边是不是多了一个空格?
解决方案十三:
设个断点试试?把这个sql语句丢到数据库里运行。再看错在哪?
解决方案十四:
用sql监视器就能捕捉到了!!或者用跟踪器!
解决方案十五:
数据长度超过了数据库设计所赋予得大小
解决方案:
OleDbCommandcom2=newOleDbCommand("insertintowcb(dep,names,ip,info)values('11','11','11','ll')",constr)我直接加入SQL语句都不行,还是说语法有错!可以从数据库中读出数据显示出来,就是没法向其中添加数据删除和修改数据!
解决方案:
insertintowcb(dep,names,ip,info)values('11','11','11','ll')到数据库里操作下。
解决方案:
我现在用的ACCESS,数据库!
解决方案:
str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";^”info)VALUES“我不知你这里有没有空格,还是Copy上来的时候才没有空格,这里应该有空格如果这样写应该是不会有错的:str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')";
解决方案:
还是不行哦,我试过了
解决方案:
该回复于2007-10-18 08:48:38被版主删除
解决方案:
调试呀,把调试中的语句搞出来放查询分析里跑不就知道了
解决方案:
建议你设个断点,然后把得到的sql语句放在查询分析器里看.就知道那里不对了.
解决方案:
在access里insertinto要as成另一个表str="INSERTINTOwcb(dep,names,ip,info)VALUES('"+a+"','"+b+"','"+c+"','"+d+"')astemp";就okey了。
解决方案:
建立了一个c#和vb的讨论群,欢迎大家加入。欢迎高手!群号:47047449
解决方案:
我发现好像很不规范啊。。好多地方没空格。。。。不会是直接COPY的吧。。。无论错误是不是在格式上,先规范了再说。还有。你四个字段都是字符型吗?不过你SQLSERVER没问题。。你试试把'换成"",我记得两个数据库对字符的引号是有区别的。
解决方案:
是不是VALUES的问题SQL对插入的直具有自动转换功能比如你能在SQL里字段类型为INT的列里插入‘01’但在ACCESS里是报错误的
解决方案:
谢谢大家,我一直再努力!!!