mysql的into语法错误_“Insertinto语句的语法错误”的解决⽅法前段时间⽤vb+access做练习发现了个问题.我定义了⼀个⾮常简单的select查询在sql server企业管理器中没问题,但在 IDE中调试就通不过,提⽰ "使⽤OleDbCommandBuilder时出现“ into 语句的语法错误”的解决⽅法".后来发现是数据库中表的字段名有问题,baidu ⼀下到下⾯的东东
当我们⽤C#开发数据库访问程序的时候,通常有3种⽅式:odbc,oleDb,ado;其实我想对于这三种⽅式,这个问题都会出现,但是这次我遇到问题的时候⽤的是oleDb的⽅式,我们就⽤oleDb的⽅式来描述吧。
问题描述:
我⽤OleDb的⽅式向Access数据⾥写数据,⽰例源码如下:
string sql="select * from MultiTable";mysql下载odbc失败
OleDbDataAdapter oleSub=new OleDbDataAdapter(sql,oleCn);
OleDbCommandBuilder cb1=new OleDbCommandBuilder(oleSub);
DataSet ds=new DataSet();
oleSub.Fill(ds."MultiTable");
DataTable dt=ds.Tables["MultiTable"];
DataRow dr=dt.NewRow();
dr["PRSERV"]="WS"+index.ToString().PadLeft(6,''''0'''');
dr["NUMBER"]="00063";
....................................
dt.Rows.Add(dr);
oleSub.Update(ds,"MulitTable");
这段代码编译的时候是没有问题的,但是在运⾏的时候,会报出⼀个运⾏时错误:”Insert into 语句的语法错误“。
⽤OleDbAdapter的时候,我并没有指定Insert语句,⽽是⽤OleDbCommandBuilder 来⾃动产⽣Insert 语句的。仔细想了⼀下,为什么会产⽣这个错误呢?我的结论是,可能这张表⾥的字段名使⽤了acces
s系统的保留字。于是我在Access⾥创建了⼀个查询,⾃⼰写了⼀个insert sql,证实我的结论是正确的,NUMBER是系统的⼀个保留字,那怎么修改呢?
⼀般来说,最简单的⽅法就是改掉这个字段名,换成⾮系统保留字的名字,但是库的结构是客户提供的,不允许修改,只有想别的办法。考虑以前的经验,操作Access,Sql Server的时候,如果表的字段中包含了系统的保留字的话,我们在字段外加上⽅括号就可以了,⽐如insert into tblmultitable(prserv,[NUMBER]) values(.......)就可以了。可是从上⾯的代码中我们看到并没有什么地⽅我们可以指定Insert 语句。我想OleDbCommandBuilder应该是根据Adapter使⽤的select语句⾃动⽣成insert 语句的,所以只要给select 语句中的字段加上⽅括号就可以了,所以我作了如下的修改:
string sql="select PRSERV,[NUMBER],PriorRef,Grantor,Grantee from MultiTable";
修改完毕以后,测试以后,仍然产⽣以前的"Insert into 语句的语法错误";问题会出在哪⾥呢?我想应该还是在OleDbCommanBuilder 上,⼀般来说,只需要这样⽤OleDbCommanBuilder类就可了:
OleDbDataAdapter oleSub=new OleDbDataAdapter(sql,oleCn);
OleDbCommandBuilder cb1=new OleDbCommandBuilder(oleSub);
打开MSDN,看看OleDbCommanBuilder的类成员。发现两个很关键的属性:QuotePrefix,QuoteSuf
fix;仔细想想,OleDb可以访问的数据类型⾮常多啊,所以关键字段的前缀,后缀的处理⽅法肯定不尽相同,⽐如访问Excel的时候表明应该写成[sheet1$的⽅式],所以提供这样⼀种⽅式是相当灵活的。接下来我再次修改代码,对这两个属性赋值:
OleDbDataAdapter oleSub=new OleDbDataAdapter(sql,oleCn);
OleDbCommandBuilder cb1=new OleDbCommandBuilder(oleSub);
cb1.QuotePrefix="[";
cb1.QuoteSuffix="]";
再次测试,通过!
在⽹上搜索了⼀下,遇到这个问题的⼈不少,不过都是选择了改字段名,并不是⼀个彻底解决的⽅法,没有很好利⽤这个灵活性,所以把我遇到这个问题的解决⽅法写出来,希望对⼤家有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。