2014-02-27 45 views
0

我試圖插入一條記錄到MS Access表使用此代碼:爲什麼我通過這段代碼得到「標準表達式中的數據類型不匹配」?

public void InsertIntoPPTData(string tx, string site_no, string xmlfile, DateTime collect_dttm, string ppt_user, string tx_memo, string file_beg, string file_end) 
{ 
    string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Duckbilled;Password=Platypus;Data Source=C:\RGT\NotSoBigData.MDB;Jet OLEDB:System database=C:\CCRWin\Data\jftfdcsc.mdw"; 
    using (var conn = new OleDbConnection(connStr)) 
    { 
     using (var cmd = conn.CreateCommand()) 
     { 
      cmd.CommandText = 
       @"INSERT INTO tx_tillermantea (tx, site_no, xmlfile, collect_dttm, ppt_user, tx_memo, file_beg, file_end) 
        VALUES(@txval, @siteNum, @xmlfileName, @DTNow, @PPTUser, @TXMemo, @strfile_beg, @strfile_end)"; 
      cmd.CommandType = CommandType.Text; 
      cmd.Parameters.AddWithValue("@txval", tx); 
      cmd.Parameters.AddWithValue("@siteNum", site_no); 
      cmd.Parameters.AddWithValue("@xmlfileName", xmlfile); 
      cmd.Parameters.AddWithValue("@DTNow", collect_dttm); 
      cmd.Parameters.AddWithValue("@PPTUser", ppt_user); 
      cmd.Parameters.AddWithValue("@TXMemo", tx_memo); 
      cmd.Parameters.AddWithValue("@strfile_beg", file_beg); 
      cmd.Parameters.AddWithValue("@strfile_end", file_end); 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 

...但 「cmd.ExecuteNonQuery();」線路爆炸:

System.Data.OleDb.OleDbException被用戶代碼未處理 消息=標準表達式中的數據類型不匹配。 源= Microsoft Office Access數據庫引擎 堆棧跟蹤: 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling在System.Data(OleDbHResult小時) 在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,對象&的ExecuteReuslt) .OleDb.OleDbCommand.ExecuteCommandText(對象&的ExecuteReuslt) 在System.Data.OleDb.OleDbCommand.ExecuteCommand(的CommandBehavior行爲,對象&的ExecuteReuslt) 在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(的CommandBehavior行爲,字符串方法) 在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

我的猜測是,這個問題是孤獨的日期時間值,但什麼是錯的:

cmd.Parameters.AddWithValue("@DTNow", collect_dttm); 

我通過「DateTime.Now」作爲collect_dttm arg。

+0

訪問中「DTNow」字體的類型是什麼? –

+0

檢查這個答案http://stackoverflow.com/questions/16217464/inserting-dates-in-an-ms-access-database-again/16218074#16218074 – Steve

+0

你能分享tx_tillermantea表定義嗎? –

回答

2

提供的鏈接至少顯示了兩個修復程序;我發現最簡單的一個就是簡單地從混合中刪除DateTime參數,並通過將「DTNow」參數替換爲對「Now()」的調用直接插入Insert語句中的dateTime值,如下所示:

cmd.CommandText = 
    @"INSERT INTO tx_tillermantea (tx, site_no, xmlfile, collect_dttm, ppt_user, tx_memo, file_beg, file_end) 
     VALUES(@txval, @siteNum, @xmlfileName, Now(), @PPTUser, @TXMemo, @strfile_beg, @strfile_end)"; 
相關問題