很抱歉的,而蹩腳的問題......但這裏是我的困境...爲什麼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',所以根本就不需要字符串表示。避免不必要的字符串轉換是非常值得的。 –
感謝您的建議。我會繼續爲我的未來努力。 :) –