[英]How to ignore MS Access “Type Conversion Error” when running SQL statement from C#?
我有一個帶有數百列表的MS Access數據庫。 運行我的SQL INSERT INTO查詢時,一個(或多個)字段會引起“類型轉換錯誤”,這很好,因為它仍然可以工作。 當我通過MS Access GUI運行SQL INSERT INTO的過程時,我只是忽略了彈出消息。
例如:
INSERT INTO tbl_Log (ID, PID, Customer_ID...)
SELECT tbl_Data.ID, tbl_Data.PID, tbl_Data.Customer_ID...
FROM tbl_Data
但是,當我通過C#運行查詢並通過Oledb發送查詢字符串時,查詢失敗(我懷疑由於類型轉換錯誤)。 如何通過C#忽略此錯誤並繼續進行查詢。
GUI中是否有“忽略所有類型轉換警告”選項或一種修改SQL字符串的方法? 還是我必須遍歷所有數百列,並確保它們是正確的類型。
在Access中執行“動作查詢”(INSERT,UPDATE或DELETE)時,如果遇到錯誤,我們可以選擇如何進行操作。 例如,給定一個名為[tbl_Log]的空表,其中包含字段
ID-長整數,主鍵
DateValue-日期/時間
和名為[tbl_Data]的表,其中包含字段
ID-長整數,主鍵
DateString-文本(10)
和樣本數據
ID DateString
-- ----------
1 2016-01-01
2 (unknown)
3 2016-03-03
如果我們運行查詢
INSERT INTO tbl_Log (ID, DateValue)
SELECT ID, DateString
FROM tbl_Data;
我們看到一個對話框,其中部分內容
由於類型轉換失敗,Microsoft Access將1字段設置為Null。
要忽略錯誤並運行查詢,請單擊“是”。
如果單擊“否”,則整個INSERT將被取消。 如果單擊“是”,則插入有效數據,並將無效值設置為Null:
ID DateValue
-- ----------
1 2016-01-01
2
3 2016-03-03
在.NET應用程序中, System.Data.OleDb
沒有“忽略錯誤”選項,而Access DAO則具有。 因此,要獲得與在“訪問”對話框中單擊“是”相同的效果,我們可以
// This code requires the following COM reference in your project:
//
// Microsoft Office 14.0 Access Database Engine Object Library
//
// and the declaration
//
// using Microsoft.Office.Interop.Access.Dao;
//
// at the top of the class file
var dbe = new DBEngine();
Database db = dbe.OpenDatabase(@"C:\Users\Public\Database1.accdb");
string sql =
"INSERT INTO tbl_Log (ID, DateValue) " +
"SELECT ID, DateString " +
"FROM tbl_Data";
db.Execute(sql);
請注意, .Execute
方法不使用RecordsetOptionEnum.dbFailOnError
選項,這將是相當於點擊“否”,在Access對話框,取消整個操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.