2011-11-07 65 views
2

似乎.net DateTime對象默認爲計算機設置的任何格式。由於我來自英國,這意味着DateTime對象是DD/MM/YYYY。.net DateTime對象,確保MM/DD/YYYY格式化

這通常很好,但我試圖使用DateTime對象將當前時間放在Access數據庫的記錄提交上。訪問(或者一般來說,SQL並不知道)要求日期格式爲MM/DD/YYYY格式。

有沒有一種方法,我可以讓DateTime對象格式化日期的MM/DD/YYYY格式,或者我將不得不轉換爲字符串,切換字符串,並插入?

+0

您可能應該使用yyyy-MM-dd格式(ISO 8601) –

+3

實際上,如果您正確使用DateTime字段,日期格式不會變成什麼格式,因爲沒有轉換爲字符串。你沒有使用連接的SQL字符串,對嗎?那會很糟糕。 –

+0

Maaaaaaaaaaaaaaaaaaaaaybe ... –

回答

5

如果要插入到數據庫中不使用日期字符串。使用一個參數對象併爲該值提供日期對象。

訪問

string mystatment = "Insert into TableName (column1, datecolumn) values (?,?)" 

OleDbCommand cmd = conn.CreateCommand(); 
cmd.Commandtext = mystatement; 
cmd.Parameters.AddWithValue("@column1", mycolumn1variable); 
cmd.Parameters.AddWithValue("@datecolumn", yourDateTimeVariable); 

,如果你正確地做這個用的生產代碼請確保您有異常處理等

using (OleDbConnection conn = new OleDbConnection("connection string")) 
{ 
    using (OleDbCommand cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "Insert into TableName (column1, datecolumn) values (?,?)"; 

     OleDbParameter param; 
     param = new OleDbParameter("name", OleDbType.VarChar, 36); // if you know the size of the column specify it 
     param.Value = mycolumn1variable; 
     cmd.Parameters.Add(param); 

     param = new OleDbParameter("mydate", OleDbType.Date); // if you know the size of the column specify it 
     param.Value = yourDateTimeVariable; 
     cmd.Parameters.Add(param); 

     conn.Open(); 
     cmd.ExecuteNonQuery(); //etc 
    } 
} 

爲SQL使用名爲@參數來代替?在你的語句中使用SqlCommand。

如果是用於屏幕顯示,請根據用戶的文化來確定用戶設置和格式。

+0

這背後的原因是什麼?我所做的字符串連接最終工作正常,爲什麼這種方法會更好? –

+0

正如你所見,字符串格式的日期取決於位置。考慮10月1月和10月1日當你有美國和GB/AU日期格式 –

+0

因爲使用這種方法你讓.NET和Access做沉重的舉重。無論使用何種格式,Access都可以計算出日期。讓它。從理論上講,你的數據庫可能處於與你的程序不同的上下文環境中(因此也就是文化),因此你不希望將這種插入方式與單個文化聯繫起來。加硬編碼文化格式不是好習慣。 – MPelletier

0

可以調用則DateTime.ToString( 「MM/DD/YYYY」),所以你不必切換它周圍

方法 DateTime結構
0

使用ToString

using System; 
using System.Globalization; 

string s = DateTime.Now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture); 
Console.WriteLine(s); 
0

你可以做這樣的事情,當你利用DateTime類:

DateTime yourDate = DateTime.Now; 
Console.WriteLine("Your Date: {0}", yourDate.ToString("MM/dd/yyyy")); 
+0

謝謝你,我沒有意識到DateTime的ToString覆蓋,我認爲我將不得不將它轉換爲一個字符串,並且改變它,我自己。 –

+0

@SamuelSmith不需要「換刀」。 DateTime類非常容易和模具一起工作。 :) 很高興我能幫上忙。 – 2011-11-07 01:49:39