当我将值@CurrentDate datetime
从前端(C#)传递给此存储过程时,我有一个存储过程,其参数类似DateTime.Now
工作正常。
但是当我在系统/服务器中将日期格式更改为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.
注意:我不想在Sqlserver中使用GETDATE()
,我想从c#传递参数。
我该如何解决这个问题?
答案 0 :(得分: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'”
答案 1 :(得分:0)
您需要使用Convert
函数将值转换为有效的DateTime。
有关详细信息:http://www.sql-server-helper.com/tips/date-formats.aspx
答案 2 :(得分: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"
答案 3 :(得分:0)
您可以在C#中使用此转换。希望这有帮助
DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)