簡體   English   中英

從C#運行SQL語句時,如何忽略MS Access“類型轉換錯誤”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM