asp.net Insert into 語句的語法錯誤

來源:互聯網
上載者:User

   asp教程.net insert into 語句的語法錯誤的解決方案

  問題描述:

  我用oledb的方式向access資料裡寫資料,樣本源碼如下:

  string sql="select * from multitable";

  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 語句的。仔細想了一下,為什麼會產生這個錯誤呢?我的結論是,可能這張表裡的欄位名使用了access系統的保留字。於是我在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,quotesuffix;仔細想想,oledb可以訪問的資料類型非常多啊,所以關鍵字段的首碼,尾碼的處理方法肯定不盡相同,比如訪問excel的時候表明應該寫成[sheet1$的方式],所以提供這樣一種方式是相當靈活的。接下來我再次修改代碼,對這兩個屬性賦值:

  oledbdataadapter olesub=new oledbdataadapter(sql,olecn);

  oledbcommandbuilder cb1=new oledbcommandbuilder(olesub);

  cb1.quoteprefix="[";

  cb1.quotesuffix="]";

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.