很抱歉的,而蹩脚的问题......但这里是我的困境...为什么OleDbCommand和OleDbType.Date不能正常工作,并且没有错误?
我想在这里减少重复的代码尽可能的,因为我有几个类似的查询,只是在参数变化计数。
使用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] =?/[Finishtime] =#?#/ [FinishTime] ='?'/FinishTime ='?' ... 此外,是什么让我放入DateTime.TryParse开始是它无法正常工作。 (虽然我最初收到一个错误...)即使我删除了解析代码,没有错误,并且SQL像正常一样传递,只有日期也没有输入。
请注意,我还生成了一个Excel电子表格,其中的日期和时间在那里没有问题,所以时间字符串传递得很好。
任何想法?注释?
感谢您的提示。你的两个调整之一解决了这个问题。日期来自用户选择'DateTimePicker'或“今日”复选框,它在我的代码中默认为'DateTime.Today()'。我的代码仅用于工作中的房子,用于不会离开建筑物的小型项目。我不认为文化会把它搞乱。也许它只是我的业余编码,那么它仍然在做字符串。 再次感谢! –
@TonyArnold:在这两种情况下,听起来你应该可以得到'DateTime',所以根本就不需要字符串表示。避免不必要的字符串转换是非常值得的。 –
感谢您的建议。我会继续为我的未来努力。 :) –