2

フロントエンド(C#)からこのストアドプロシージャに@CurrentDate datetime値を渡すと、のようなパラメータを持つストアドプロシージャがあり、正常に機能しています。DateTime.Now

しかし、システム/サーバーのように日付形式を変更すると、その時刻はのような値を返します。この値をストアドプロシージャに渡していますが、次のようなエラーメッセージが表示されます。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

ローカル タイムゾーンで日付を保存すると、国際的に起動するときに頭痛の種になる可能性があります。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"

于 2012-10-25T13:23:34.663 に答える
0

この変換は C# から使用できます。お役に立てれば

DateTime.Now.ToString(DateTimeFormatInfo.InvariantInfo)
于 2012-10-25T13:29:16.457 に答える
0

関数を使用して値を有効な DateTime に変換する必要がありConvertます。

詳細については: http://www.sql-server-helper.com/tips/date-formats.aspx

于 2012-10-25T13:13:36.730 に答える