1

EF を使用してデータベースに日付値を保存する際に問題が発生しています。

私のC#コードでは、日付は次のように定義されています:

DateTime ed = DateTime.Now.AddMonths(+6);

SQL Server では、date列は として定義されDateTimeます。日付はYYYY/MM/DD時間なしの形式でソートされます。

次のコードを使用してデータベースに値を挿入しようとすると:

t_a m = new t_a();
m.dbDate = DateTime.Today;
entity.AddTot_a(m);
entity.SaveChanges();

次のエラー メッセージが表示されます。

datetime2 データ型を datetime データ型に変換すると、範囲外の値になりました。

値が として表示されているMM/DD/YYY: HH:MM:SSのに対し、データベースでは として保存されているためだと思いますYYY/DD/MM。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

SQL Server はDateTime任意の文字列形式で a を保存しません。これは 8 バイトの数値として保存されます。したがって、文字列のフォーマットが問題になることはありません。

また、あなたは .NET をDateTimeずっと使っています - それがそれを行う方法なので、このエラーの原因は別のものに違いありません。

エラーメッセージから推測すると、次のような状況が発生している可能性があります。

  • SQL Server 2008 (または 2008 R2、または 2012) バージョンのデータベースに対して EF モデルを開発している

  • SQL Server 2005データベースに対してアプリケーションを実行している

問題は、2008 (またはそれ以降) のデータベースに対して EF モデリング ツールを使用すると、デフォルトでDATETIME2"date" データ型として使用されることですが、SQL Server 2005にはそのデータ型がありません。

.edmxアプリケーションをビルドする前に、ファイルが Visual Studio で XML ファイルとして開かれていることを確認する必要があります(ソリューション エクスプローラーでファイルを右クリックし、[開く...] を使用して XML エディターを選択します)。 、次に、EDMX ファイルでこの属性を見つけて修正します。

<Schema Namespace="MdsModel.Store" Alias="Self" Provider="System.Data.SqlClient" 
        ProviderManifestToken="2005" ....>
        ****************************

ProviderManifestTokenの値が に設定されていることを確認してください2005

残念ながら、これをプロパティとして設定する本当に良い方法はどこにも見つかりませんでした。EDMX モデル ファイルで何かを変更するたびに、アプリをビルドする前にこれを確認する必要があります。

于 2013-06-06T05:01:16.677 に答える
0

何らかの理由でコメントを追加できません (申し訳ありませんが、このサイトではまだ新しいものです) ので、これを回答として投稿ます。

于 2013-06-05T22:20:00.407 に答える