asp.net Insert into 語句的語法錯(cuò)誤
來源:程序員人生 發(fā)布時(shí)間:2013-11-10 16:21:04 閱讀次數(shù):2788次
asp教程net insert into 語句的語法錯(cuò)誤的解決方法
問題描述
我用oledb的方式向access數(shù)據(jù)里寫數(shù)據(jù)示例源碼如下
string sql="select * from multitable";
oledbdataadapter olesub=new oledbdataadapter(sqlolecn);
oledbcommandbuilder cb=new oledbcommandbuilder(olesub);
dataset ds=new dataset();
olesubfill(ds"multitable");
datatable dt=dstables["multitable"];
datarow dr=dtnewrow();
dr["prserv"]="ws"+indextostring()padleft();
dr["number"]="";
dtrowsadd(dr);
olesubupdate(ds"mulittable");
這段代碼編譯的時(shí)候是沒有問題的但是在運(yùn)行的時(shí)候會(huì)報(bào)出一個(gè)運(yùn)行時(shí)錯(cuò)誤”insert into 語句的語法錯(cuò)誤“
用oledbadapter的時(shí)候我并沒有指定insert語句而是用oledbcommandbuilder 來自動(dòng)產(chǎn)生insert 語句的仔細(xì)想了一下為什么會(huì)產(chǎn)生這個(gè)錯(cuò)誤呢?我的結(jié)論是可能這張表里的字段名使用了access系統(tǒng)的保留字于是我在access里創(chuàng)建了一個(gè)查詢自己寫了一個(gè)insert sql證實(shí)我的結(jié)論是正確的number是系統(tǒng)的一個(gè)保留字那怎么修改呢?
一般來說最簡(jiǎn)單的方法就是改掉這個(gè)字段名換成非系統(tǒng)保留字的名字但是庫(kù)的結(jié)構(gòu)是客戶提供的不允許修改只有想別的辦法考慮以前的經(jīng)驗(yàn)操作accesssql server的時(shí)候如果表的字段中包含了系統(tǒng)的保留字的話我們?cè)谧侄瓮饧由戏嚼ㄌ?hào)就可以了比如 insert into tblmultitable(prserv[number]) values()就可以了可是從上面的代碼中我們看到并沒有什么地方我們可以指定insert 語句我想oledbcommandbuilder應(yīng)該是根據(jù)adapter使用的select語句自動(dòng)生成insert 語句的所以只要給select 語句中的字段加上方括號(hào)就可以了所以我作了如下的修改
string sql="select prserv[number]priorrefgrantorgrantee from multitable";
修改完畢以后測(cè)試以后仍然產(chǎn)生以前的"insert into 語句的語法錯(cuò)誤";問題會(huì)出在哪里呢?我想應(yīng)該還是在oledbcommanbuilder上一般來說只需要這樣用oledbcommanbuilder類就可了
oledbdataadapter olesub=new oledbdataadapter(sqlolecn);
oledbcommandbuilder cb=new oledbcommandbuilder(olesub);
打開msdn看看oledbcommanbuilder的類成員發(fā)現(xiàn)兩個(gè)很關(guān)鍵的屬性quoteprefixquotesuffix;仔細(xì)想想oledb可以訪問的數(shù)據(jù)類型非常多啊所以關(guān)鍵字段的前綴后綴的處理方法肯定不盡相同比如訪問excel的時(shí)候表明應(yīng)該寫成[sheet$的方式]所以提供這樣一種方式是相當(dāng)靈活的接下來我再次修改代碼對(duì)這兩個(gè)屬性賦值
oledbdataadapter olesub=new oledbdataadapter(sqlolecn);
oledbcommandbuilder cb=new oledbcommandbuilder(olesub);
cbquoteprefix="[";
cbquotesuffix="]";
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)