2016-04-08 22 views
0

Bu bugün oldu ve en garip şey.SQL Query ile garip davranış

DB Değerlerini eklemek için Entity Framework + LINQ kullanıyorum. Tarih-saat sütunu var ve 2016/04/01 tarihine kadar çalışıyordu.

Bugün ben bazı satırları eklemek ve bunları seçmek çalıştı:

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

Bu çalışır, ancak her nasılsa şimdi bununla değerleri eklemek çalıştığında:

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

Bu datetime ekler gibi: 2016/01/04 00: 00: 00.000

Ama Bülten tarihi Metin geçerli: 2016/04/01 00:00:00

Bunu anlayamıyorum.

Lütfen Yardım için başvurunuz.

+2

Eğer belirli bir formatta değer, bu formatı 'DateTime.Pars kullanarak açık bir şekilde koymanızı öneririm eExact' ... –

+2

Muhtemelen sunucu ve uygulama farklı Locale kullanıyor. Jon'un belirttiği gibi, her zaman özellikle dağıtılmış bir uygulamada tarih saatlerine özgü olmalısınız. –

cevap

1

Tarih biçimleri oldukça kırılgandır; YYYY-AA-DD'yi çalıştırmayı düşündüğünüz sorgular için, aniden, YYYY-DD-MM'yi kullanmaya başladığınızda veya terminalde oturum açan farklı bir kullanıcı kadar küçük bir şeye benzemenin sorgulanması çok kolaydır.

, tam olarak beklediğiniz gibi ayrıştırılmış dizeler olarak veritabanlarına geçirilen tarihlere güvenmeyin. Onları tarih nesneleri olarak geçirin ve çok daha iyi sonuçlar elde edersiniz.

0

Bouild bu

DateTime x = new DateTime (2016,01,04) gibi datetime nesnesi; varlık iskelet üzerine geçerken

yüzden sorun yok // yıl ay gün

ayrıca dizginiz bu formatta "20140104 00:00:00" ise, güvende olmalısınız (en azından MSSQL'in bu formatta bir problemi yoktur, C# da havalı olup olmadığından emin değil)