2

我有一个存储过程,它有一个类似的参数@CurrentDate datetime,当我将值DateTime.Now从前端(C#)传递到这个存储过程时,它工作正常。

但是当我在我的系统/服务器中更改日期格式时,该时间将返回一个值,如. 我将此值传递给存储过程,我收到如下错误消息,English(India)DateTime.Now25-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# 传递参数。

我该如何解决这个问题?

4

4 回答 4

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'”

于 2015-07-20T06:46:32.057 回答
0

您需要使用Convert函数将该值转换为有效的 DateTime。

更多信息:http ://www.sql-server-helper.com/tips/date-formats.aspx

于 2012-10-25T13:13:36.730 回答
0

当您在国际上发布时,将日期存储在当地时区可能会让人头疼。如果您GETUTCDATE()在 SQL Server 端使用保存当前日期,您可以获得用户特定时区的时间,如下所示:

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"

于 2012-10-25T13:23:34.663 回答
0

您可以从 C# 使用此转换。希望这可以帮助

DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)
于 2012-10-25T13:29:16.457 回答