2011-05-30 56 views
0

在Microsoft SQL Server Management Studio中,在調用存儲過程之後,我可以看到表格中的格式爲2011-05-20 19:56:09如何在與SQL的連接中設置日期格式?

但是,在我的C#程序中,使用OdbcConnection從表中獲取記錄後,我發現時間格式爲05/20/2011 19:56:09。因此,我手動將格式MM/DD/YYYY hh:mm:ss轉換爲YYYY-MM-DD hh:mm:ss(實際上,我如何驗證格式爲hHH,因爲時間顯示爲19?)。

我的問題是爲什麼和在連接的哪個部分,格式被改變?我如何在我的聯繫中設置不變的文化?

cmd = new OdbcCommand("{?=CALL stored_procedure_in_SQL(?,?)}", m_SqlConn); 
cmd.Parameters.Add(new OdbcParameter("RETURN_VALUE", OdbcType.Int, 4, 
    ParameterDirection.ReturnValue, false, 0, 0, null, 
    DataRowVersion.Default, null)); 

//@parameter1 
cmd.Parameters.Add("@parameter1", OdbcType.VarChar, 50).Value = value1; 

//@parameter2 
cmd.Parameters.Add("@parameter2", OdbcType.Int)=value2; 

object objTime=ds.Tables[0].Rows[0][0] 
Console.WriteLine(objTime.Tostring()) //05/20/2011 19:56:09 
DateTime dateTime = Cdate(objTime, "MM/dd/yyyy h:mm:ss tt"); 
//2011-05-20 19:56:09 
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss")); 

//Function Cdate 
static public DateTime Cdate(object val, string format) 
{ 
    // check if the object is a date time alread 
    string str; 
    if(val is DateTime) 
    { 
     // Since val is already a dateTime,Return here 
     return (DateTime)val; 
    } 

    // convert via string 
    if(val != DBNull.Value) 
    { 
     str = val.ToString().Trim(); 
    } 
    else 
    { 
     str = ""; 
    } 

    if(str == "") 
    { 
     return DateTime.MinValue; 
    } 
    else 
    { 
     return DateTime.ParseExact(str, format, 
      CultureInfo.InvariantCulture); 
    } 
} 
+3

我懷疑這個值在數據庫中有格式。 (在這裏查看詳細信息)(http://stackoverflow.com/questions/1437454/date-format-problem)(處理C#'DateTime',但可能在這裏應用相同種類的邏輯)。 – 2011-05-30 20:54:56

+0

'CDate'方法中''returns'太多了。你能告訴我們在你的情況下執行哪一個? – Snowbear 2011-05-30 20:55:59

+0

@Snowbear,第一個返回在我的程序中執行,如添加註釋 – Summer 2011-05-30 21:06:06

回答

8

您無法在連接字符串上設置DateTime格式。

您所看到的僅僅是DateTime的某種(內部)表示形式的不同格式。

格式化由您使用的工具和.NET代碼確定您使用的文化。

當你想顯示的時候,那麼你需要格式化,雖然使用像你這樣的自定義格式字符串時,沒有涉及CultureInfo元素。

檢查DateTime上的不同ToString過載。

+0

+1中設置/更改SQL Server中的DateTime,它只是一個DateTime,並且沒有與其關聯的「格式」。 – 2011-05-30 21:05:29

+0

如果我理解正確,因爲我的格式是yyyy-MM-dd HH:mm:ss,它不對應任何格式,所以在顯示時我不需要擔心CultureInfo? – Summer 2011-05-30 21:16:40

+0

@Summer - 我建議閱讀[自定義日期和時間格式字符串](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx)上的文檔。文化可能會產生影響,但我不相信在這種特殊情況下有一種文化。 – Oded 2011-05-31 07:33:31

0

您不能在連接字符串中設置dateformat,但可以在查詢批處理中調用SET DATEFORMAT DMY

相關問題