2

次のように日付をストアド プロシージャに渡そうとしています。

@dateRegistered = '28/04/2012'

しかし、それは私に言い続けます:

データ型 varchar を日付に変換中にエラーが発生しました。

次のようにすると機能します。

@dateRegistered = '04/28/2012'

しかし、これは私が使いたい形式ではありません。

次のクエリを実行して、形式を設定しました。

SET DATEFORMAT dmy

なぜ機能しないのですか?

編集:これが私がやった方法です:

私のストアド プロシージャでは、次のように記述します。

SET DATEFORMAT dmy

次に、コードから、次のように渡します。

myCommand.Parameters.Add("@dateRegistered", SqlDbType.Date);
myCommand.Parameters["@dateRegistered"].Value = DateTime.Now.ToString("dd/mm/yyyy");

コンピューター (またはサーバー) の日付形式が異なる場合でも、常に dmy が使用されるように、文字列として渡しました。

編集 編集:

私はそれをdatetime.nowとして渡しました。送信するとデフォルトの形式に変換され、読み取るとコンピューターの形式に変換されるようです。これがどのように正確に起こるかはわかりませんが、うまく機能しているようです。

4

4 に答える 4

3

パラメータが (データベース内の) であるように見えますが、 (データベース内のに対応する)dateを渡そうとしています。代わりに .NETオブジェクトを渡すと、期待どおりに動作するはずです。stringvarcharDateTime

于 2012-04-28T10:56:09.907 に答える
2

頭の痛い問題を解決し、明確な日付形式を使用してください -20120428 (YYYYMMDD)または2012-04-28.

余談ですが、(タグに基づいて) C# を使用しているとのことですが、ADO.NET はどのように使用していますか? それともLinqからSQL / EF /その他のORMですか?

編集:

わかりCONVERTました、日付文字列の形式を示す適切なパラメーターを指定して関数を使用します

例えば:

declare @D datetime
set @D = CONVERT(datetime, '04/28/2012', 101)
print @D

101は米国標準フォーマットですmm/dd/yyyy

convert を使用すると、日付順などの環境設定に関係なく、常に機能することが保証されます。

于 2012-04-28T10:57:00.193 に答える
1

あなたのコードは * SET DATEFORMAT dmyを使用した後に機能し ます

次のコマンドでデータベースの日付形式を確認してください:-

  • dbcc ユーザーオプション

デフォルトで「dateformat:mdy」をチェックします。したがって、日付を「MM/dd/yyyy」形式で渡すことも問題なく機能します。

ハッピーコーディング:)

于 2014-01-21T12:11:25.013 に答える
1

を呼び出すとset dateformat dmy、現在の接続にのみ影響します。文字列を日付に変換する直前に毎回設定する必要があります。

@IanYatesが示唆するように、最良の解決策はおそらくISO形式です。

于 2012-04-28T11:11:23.783 に答える