0

問題なく新しいレコードを作成しますが、モデルを更新するたびに、日付が変更されていない場合でも、「式をデータ型 datetime に変換する算術オーバーフロー エラー」エラーが発生します。

更新する既存の db レコードの日付が有効であることを確認しました。

以下のコード スニペットは、日付フィールドが更新されていなくても失敗します。

var dbModule = db.Modules.FirstOrDefault(v => v.ModuleId == module.ModuleId);

dbModule.Name = module.Name;
//dbModule.Password = module.Password;
//dbModule.Colour = module.Colour;
//dbModule.Modified = module.Modified;

db.SaveChanges();

トレースを見ると、以下のコマンドが表示されているので、日付フィールドが更新されていないことは確かです。

ADO.NET:Execute NonQuery "update [dbo].[Modules]
set [Name] = @0
where ([ModuleId] = @1)"

明確にするために、動作環境は次のとおりです。

  • ASP.NET MVC 3
  • .NET 4.5
  • SQL Server 2012 (エクスプレス)
  • 対応する edmx を使用して、データベース ファースト アプローチによって生成されたモデル。
  • DateTime モデル フィールドは SQL Server の DateTime 型です

SQL Server プロファイラーを使用しようとしましたが、更新ステートメントを出力して正確な SQL を表示しないため、上記の intellitrace に依存しています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

ああああ!何日も何日も後。

SQL Server Profiler を使用して、両方をログに記録する必要があることがわかりました

  • RPC:完了
  • SQL:バッチ完了

これにより、すべての SQL ステートメントが表示され、データベースでトリガが発生し、Modified フィールドが設定され、不適切な形式の文字列日付が使用されたという事実を突き止めることができました。

于 2013-09-19T23:20:29.800 に答える
0

BlinkyBill、エンティティ/データベースの日時フィールドが null 可能かどうか、および正しいマッピングを使用しているかどうかを確認してください。また、更新メソッドでこのフィールドを明示的に設定することもできます。それが役に立てば幸い!

于 2013-09-19T19:19:14.143 に答える