【发布时间】:2015-09-01 05:48:25
【问题描述】:
抱歉这个相当蹩脚的问题......但这是我的困境......
我在这里尽可能地减少重复代码,因为我有几个类似的查询,只是参数计数不同。
使用 AccessDB(我这里没有选择)。但是,当我有一个需要输入的日期时,下面的代码对我有用。它没有输入日期,也没有给我任何错误。
public bool DoUpdate(string query, string[] data) {
using (OleDbConnection conn = new OleDbConnection(this.ConnStr))
{
try
{
OleDbCommand cmd = new OleDbCommand(query, conn);
DateTime tmp;
for (int i = 0; i < data.Length; i++)
{
if (DateTime.TryParse(data[i], out tmp)) // Checks if valid date...
cmd.Parameters.Add(new OleDbParameter("?", OleDbType.Date) { Value = tmp.ToString() });
else
cmd.Parameters.AddWithValue("?", data[i]);
}
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.ErrorCode.ToString() + "\n\n" + ex.Message + "\n\n" + query);
if (conn.State == ConnectionState.Open)
{
conn.Close();
return false;
}
}
}
return true;
}
使用中:
// [ time string is DateTime.Now.ToString("M/dd/yyyy h:mm:ss tt") ]
if ( DB.DoUpdate("UPDATE Loads SET Customer='?', FinishTime=?, Carrier='?', Reference='?', Tags='?', Status='Received' WHERE LoadID = ?",
new string[] { Item["Customer"], Item["FinishTime"], Item["Carrier"], Item["Reference"], Item["TagIDs"], Item["LoadID"] }) ) { ... }
日期列是“FinishTime”。请注意,我在 SQL 中尝试了几种变体。如:[FinishTime]=? / [完成时间]=#?# / [完成时间]='?' / 完成时间='?' ... 此外,是什么让我一开始就放入 DateTime.TryParse 是它不起作用。 (虽然我最初收到了错误...)即使我剪掉了 Parse 代码,没有错误,并且 SQL 正常传递,也只有日期没有输入。
注意,我还生成了一个带有日期和时间的 Excel 电子表格,没有问题,所以时间字符串传递得很好。
有什么想法吗?评论?
【问题讨论】:
标签: c# datetime ms-access oledb ole