2016-04-08 9 views
0

これは今日起こった、それは変です。SQLクエリで奇妙な動作があります

私はEntity Framework + LINQを使用してDB値を挿入しています。 datetime列があり、2016/04/01まで動作していました。

今日、私はいくつかの行を挿入して、それらを選択しようとしたとき:

Where BulletingDate = Convert(DateTime, '2016-03-01 00:00:00') 

これは動作しますが、何とか今私はこれに値を挿入しようとしたとき:

a.BulletingDate = DateTime.Parse(txtBulletinDate.Text); 
entities.Auctions.Add(a); 
entities.SaveChanges(); 

それは、日時を追加以下のような:2016年1月4日00:00:00.000

しかし速報日付テキストは次のとおりです。2016年4月1日0時00分00秒

私は理解できないようです。

お願いします。

+2

値を特定の形式で使用するには、明示的にその形式を 'DateTime.Pars eExact' ... –

+2

サーバとアプリケーションが異なるロケールを使用している可能性があります。 Jon氏が述べているように、分散アプリケーションの場合は、特に日付時刻を特定する必要があります。 –

答えて

1

日付形式は非常に壊れやすいです。 YYYY-MM-DDを実行していると思われるクエリでは、YYYY-DD-MMなどの端末を突然起動させるのは非常に簡単です。

Do notは、データベースに渡された日付が、期待通り正確に解析された文字列として使用されているかどうかに依存します。それらを日付オブジェクトとして渡すと、より良い結果が得られます。

0

datetime type in SQL Serverは、分数秒を使用します。それは最後に.000です。

可能であれば、datetime2 in SQL Server 2008 and upに切り替えることをお勧めします。はオプションで分数秒です。 1秒の割合を追跡する必要がない場合は、datetime2(0)を使用できます。それはC#のDateTimeとうまくいきます。

0

Bouildこの

のDateTimeのx =新しい日時(2016,01,04)のようなあなたのDateTimeオブジェクト; //年月日

エンティティフレームワークに

を渡すときに、あなたが問題を持っていけません

あなたの文字列がこの形式の "20140104 00:00:00"である場合も安全です(少なくともMSSQLはその形式に問題はありませんが、C#もクールだとは分かりません)

関連する問題