web-dev-qa-db-ja.com

「SqlException:datetime2データ型をdatetimeデータ型に変換すると、値が範囲外になりました。」を修正する方法。

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

私のコードは次のようなものです:

        using (var contxt = new realtydbEntities())
        {
            var status = GetStatus();

            var repIssue = new RepairIssue()
            {
                CreaterId = AuthorId,
                RepairItemDesc = this.txtDescription.Text,
                CreateDate = DateTime.Now,//here's the problem
                RepairIssueStatu = status
            };

            contxt.AddObject("RepairIssues", repIssue);
            contxt.SaveChanges();
        }

CreateDateタイプがsmalldatetimeである列へのプロパティマッピング。

このコードを実行する方法は?

13

問題の根本は、C#のDateTimeオブジェクトがSQLのsmalldatetimeタイプよりも「大きい」ことです。違いの概要は次のとおりです。 http://karaszi.com/the-ultimate-guide-to-the-datetime-datatypes

だから本当にあなたのオプションは次のとおりです。

  1. 列タイプをsmalldatetimeからdatetime(またはdatetime2)に変更します
  2. EFを使用する代わりに、独自のSQLコマンドを作成します(そして、SqlDateTimeを使用できます)
8
Jason

同じ例外がありましたが、最小の日時値を取得するのはnull許容でない日時プロパティでした。これはDBでの小さな日時ではありませんでしたが、C#の最小日時がSQLの最小日時の制限を超えています。解決策は明白でした。日時を適切に設定してください。ところで、コードは私のものではなかったので、私はそのプロパティに気づいていませんでした:)

13
Milton

これをモデルクラスに追加します。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Properties<DateTime>().Configure(c => c.HasColumnType("datetime2"));
    }
2
Howie Krauth

SqlDateTime は、必要なことを実行できるようにします。

1
Rob

移行内容を確認してください。このようにモデルを変更しました」

public DateTime? CreationDate {get;セットする; }

次に、新しい移行を追加し、最後にデータベースの更新を実行します

0
Ghadir Farzaneh

古いデータを削除せずにSQLテーブルとアプリケーションに日時列を追加したため、このエラーが発生しました。新しいレコードを更新できることがわかりました。ただし、フィールドが追加される前にテーブルにあったレコードの1つで更新が試行されたときに、このエラーがスローされました。

0
midohioboarder