2013-06-20 40 views
0

我有一個奇怪的問題。我在MS Access中寫了一個查詢,它在從MS Access運行時完美地插入數據庫中,但是當從C#執行相同的查詢時,它會將「驗證文本」顯示爲OleDbException,並且插入命令失敗。 「驗證規則」爲「@。*」該列保存應該有一個「@」和一個點「。」的電子郵件。之後。當「驗證規則」被移除並且從C#執行查詢時沒有問題。它僅在設置驗證規則時發生,並且僅從C#發生錯誤,而不是從MS Access查詢執行發生。當「驗證規則」設置時,SQL在MS Access中執行良好,但在C#中不執行

我已經上傳的代碼和數據庫:http://www.2shared.com/file/XYmFD8Mg/Database_Validation.html

SQL查詢在MS Access:

INSERT INTO EMail (EMail, Company) 
VALUES ('[email protected]', 'Company'); 

的代碼是:

try 
    { 
     string dbPath = null; 

     if (File.Exists(Path.GetFullPath(@"..\..\..\Database.accdb"))) 
      dbPath = Path.GetFullPath(@"..\..\..\Database.accdb"); 

     dbConnection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbPath); 
     dbConnection.Open(); 

     if (0 >= new System.Data.OleDb.OleDbCommand("INSERT INTO EMail (EMail, Company) VALUES ('[email protected]', 'Company')", dbConnection).ExecuteNonQuery()) 
      MessageBox.Show("Could not insert '[email protected]'. Check if already inserted."); 

     try { dbConnection.Close(); } 
     catch (Exception) { } 
    } 
    catch (Exception Ex) 
    { 
     try { dbConnection.Close(); } 
     catch (Exception) { } 

     MessageBox.Show(Ex.Message); 
    } 

數據庫快照:

enter image description here

回答

3

你說得對,我可以證實行爲。

我做了一些測試,顯然,如果你改變了驗證規則

Like "%@%.%" 

它工作在C#中,但它不會在Access工作了。我猜原因是Access使用DAO進行數據訪問,它使用*作爲通配符,而OLEDB的通配符是%

我發現下面的驗證規則會產生所需的結果,Access和.NET:

Like "*@*.*" Or Like "%@%.%"