asp.net Insert into 語句的語法錯誤
來源:程序員人生 發布時間:2013-11-10 16:21:04 閱讀次數:2782次
asp教程net insert into 語句的語法錯誤的解決方法
問題描述
我用oledb的方式向access數據里寫數據示例源碼如下
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");
這段代碼編譯的時候是沒有問題的但是在運行的時候會報出一個運行時錯誤”insert into 語句的語法錯誤“
用oledbadapter的時候我并沒有指定insert語句而是用oledbcommandbuilder 來自動產生insert 語句的仔細想了一下為什么會產生這個錯誤呢?我的結論是可能這張表里的字段名使用了access系統的保留字于是我在access里創建了一個查詢自己寫了一個insert sql證實我的結論是正確的number是系統的一個保留字那怎么修改呢?
一般來說最簡單的方法就是改掉這個字段名換成非系統保留字的名字但是庫的結構是客戶提供的不允許修改只有想別的辦法考慮以前的經驗操作accesssql server的時候如果表的字段中包含了系統的保留字的話我們在字段外加上方括號就可以了比如 insert into tblmultitable(prserv[number]) values()就可以了可是從上面的代碼中我們看到并沒有什么地方我們可以指定insert 語句我想oledbcommandbuilder應該是根據adapter使用的select語句自動生成insert 語句的所以只要給select 語句中的字段加上方括號就可以了所以我作了如下的修改
string sql="select prserv[number]priorrefgrantorgrantee from multitable";
修改完畢以后測試以后仍然產生以前的"insert into 語句的語法錯誤";問題會出在哪里呢?我想應該還是在oledbcommanbuilder上一般來說只需要這樣用oledbcommanbuilder類就可了
oledbdataadapter olesub=new oledbdataadapter(sqlolecn);
oledbcommandbuilder cb=new oledbcommandbuilder(olesub);
打開msdn看看oledbcommanbuilder的類成員發現兩個很關鍵的屬性quoteprefixquotesuffix;仔細想想oledb可以訪問的數據類型非常多啊所以關鍵字段的前綴后綴的處理方法肯定不盡相同比如訪問excel的時候表明應該寫成[sheet$的方式]所以提供這樣一種方式是相當靈活的接下來我再次修改代碼對這兩個屬性賦值
oledbdataadapter olesub=new oledbdataadapter(sqlolecn);
oledbcommandbuilder cb=new oledbcommandbuilder(olesub);
cbquoteprefix="[";
cbquotesuffix="]";
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈