2012-10-25 48 views
2

我已存儲的過程,它具有像@CurrentDate datetime的參數,當我從前端傳遞值DateTime.Now(C#)到這個存儲過程是工作精細。DateTimeFormat問題,當傳遞參數到MS-SQL存儲過程

但是,當我在我的系統/服務器改變日期格式English(India),到時候DateTime.Now將返回像25-10-2012 PM 05:23:27值。我這個值傳遞給存儲過程,我得到一個錯誤消息像下面,

Msg 242, Level 16, State 3, Line 10 
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. 

注:我不想用GETDATE()從SQLSERVER,我想通過從C#中的參數。

我該如何解決這個問題?

+0

什麼是使用GETDATE()的問題? – tranceporter

+0

我的Sql服務器運行的是不同的機器,這是不同的位置......我只需要一個服務器日期,它運行IIS服務器。 –

+1

然後正確的做法是在SQL Server端使用GETUTCDATE()存儲日期。然後在代碼中,在向用戶顯示時間(如果需要)之前,可以將其轉換爲用戶的本地時區並顯示它。您可以使用TimeZoneInfo類獲取特定於語言環境的日期時間,以進行日期時間比較。 – tranceporter

回答

0

您可以使用此轉換來自C#。希望這可以幫助

DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo) 
+1

是@Thangamani Palanisamy ....非常感謝你...它工作正常,沒有任何convertions&也不需要更改參數數據類型.... –

+0

@ManikandanSethuraju:不客氣 –

0

在當地時區存儲日期可引起頭痛,當你啓動國際。 如果您保存在SQL Server端使用GETUTCDATE()當前日期,你可以在特定於用戶的時區的時間如下:

public DateTime GetDateByTimeZoneId(DateTime dateTime, string timeZone) 
{ 
    if (dateTime == null) 
    { 
     return null; 
    } 

    dateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc); 
    return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById(timeZone)); 
} 

然後,您可以通過用戶相關的時區像"GMT Standard Time"

1

日期格式的問題是因爲您將它轉換爲字符串,然後返回到DateTime值。根據特定服務器上的文化設置,這可能會或可能不會工作。它也可能曲解數據,例如將2013-10-12的日期轉換爲2013-12-10。

DateTime datet = new DateTime(year,month,day); 
    startDateParam.Value = datet; 
    endDateParam.Value = datet; 

「請注意,服務器存儲的日期時間與格式 '1900-01-01 00:00:00.000'」