为什么我使用此代码获得“条件表达式中的数据类型不匹配”?

时间:2014-02-27 19:47:24

标签: c# ms-access oledbcommand executenonquery oledbexception

我正在尝试使用以下代码将记录插入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未被用户代码处理   消息=条件表达式中的数据类型不匹配。   Source = Microsoft Office Access数据库引擎   堆栈跟踪:        在System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)        在System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,Object& executeResult)        在System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)        在System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,Object& executeResult)        在System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior,String method)        在System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

我的猜测是问题是单独的DateTime值,但是出了什么问题:

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

我正在传递“DateTime.Now”作为collect_dttm arg。

1 个答案:

答案 0 :(得分:2)

提供的链接至少显示两个修复程序;我发现最简单的方法就是从混合中删除DateTime参数,直接从Insert语句中注入dateTime值,将“DTNow”参数替换为调用“Now()”,如下所示:

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)";