为什么此代码会出现“条件表达式中数据类型不匹配”的情况?[复制]
-
24-12-2019 - |
题
我正在尝试使用以下代码将记录插入到 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) eresult)在system.data。 oledb.oledbcommand.executecommand(commandbehavior行为,object&executeresult)在system.data.oledb.oledb.oledb.oledb.oledbcommand.executereadereadereaderinternal(commandbehavior行为,string string方法,string string方法)
我的猜测是问题出在单独的 DateTime 值上,但问题出在哪里:
cmd.Parameters.AddWithValue("@DTNow", collect_dttm);
?
我将“DateTime.Now”作为collect_dttm arg传递。
解决方案
提供的链接至少显示了两个修复程序;我发现最直接的方法是简单地从组合中删除 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)";
不隶属于 StackOverflow