C 操作Access資料庫的若干問題記錄

2021-07-24 16:41:38 字數 1118 閱讀 2963

最近做乙個資料填報軟體,用的c#,操作access資料庫的時候遇到了一些問題,走了很多彎路,記錄如下:

1.

「」microsoft access 設定1欄位為null是因為型別轉換失敗,它未將0記錄新增到表是因為鍵值衝突,沒有新增0記錄是因為鎖定衝突,沒有新增0記錄是因為有效性規則衝突...」

其實,這個提示在本例中有一定的誤導性,網上查,有不少說法是主鍵id的問題,最後我試出來發現和主鍵問題,無關,其實是字段型別轉換出錯的問題:

表中有兩個字段,abs1和abs2,設定為數字型別,但是賦值的時候因為忽略掉,所以就用了空白字串"",所以資料庫認為這個空白字串無法轉換成數字,就報錯了,所以解決方法是把字段換成文字型別,或者這兩個欄位給個預設值0。

2. 上個問題是解決了,接著執行程式,繼續報錯,提示還是insert into 語法錯誤,這次還是把生成的sql語句放在access2010中測試,通過,沒問題。這樣,問題就比較清楚了,同樣的sql語句在access2010中可以執行而在c#中無法執行,說明兩者對語句的處理有著不同的機制,語句如下:

insert into t_detect (no, channel, item, ...) values ("no1","x1","農藥殘留",...);
看似很正常的語句,語法上沒有問題,結合網上查到的一些別人分享的資訊,聯想到了關鍵字衝突的問題,於是查了一下,這裡的第乙個欄位是no,而「no」正是access的關鍵字,而access2010有這樣的處理機制讓語句通過,但c#沒有,於是報錯。

解決方法,要麼是改欄位名,要麼是在語句中給欄位名加中括號,修改如下:

/// /// 構造sql的各列名

///

public string tosqlcols()

再次測試,問題解決!

由於c#操作access不是很熟悉,這兩個問題卡住了兩天,讓這次經驗教訓變得非常深刻。

C 操作Access資料庫

using system using system.collections.generic using system.linq using system.text using system.data using system.data.oledb using system.configuration...

c 操作ACCESS資料庫

c 簡單操作access資料庫 這兩天做專案,需要將資料存到資料庫,並進行一些簡單的增刪改操作,剛好記錄下access資料庫的基本操作方法,下文中提及到知識應用如有不正確的地方,大家多多指正,在程式開始時,我打算使用一些資料庫操作語句來建立乙個資料庫,不過好像用的不是很成功。而且如果要手動建立資料庫...

c 操作Access資料庫

先新增兩個com引用 第乙個 microsoft activex data objects 2.8 library 第二個 microsoft ado ext.2.8 for ddl and security 1.建立access資料庫 using adox adox.catalog cat new...