Vra

Ek gebruik SQL Server 2008 R2 as 'n data stoor.

Tot nou toe op die toets masjien het ek die Engelse weergawe van die sagteware en gebruik om navrae opmaak die veld DATETIME as maak

fromDate.ToString("MM/dd/yyyy");

nou het ek die databasis op 'n ander bediener wat is in die Italiaanse taal ontplooi. Ek sal die formaat in my kode verander na

fromDate.ToString("dd/MM/yyyy");

Is daar 'n manier om die navraag te maak in 'n neutrale formaat?

thanks!

wysig :

Ek het vergeet om te noem dat ek met behulp van NetTiers met CodeSmith. Hier is 'n volledige voorbeeld

AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
Was dit nuttig?

Oplossing

ISO 8601 Data-elemente en wisselaar formate - Inligting wisselaar - Verteenwoordiging van datums en tye kan beide die YYYY-MM-DD en JJJJMMDD. SQL Server erken die ISO spesifikasies.

  

Hoewel die standaard kan beide die   YYYY-MM-DD en JJJJMMDD formate vir   volledige kalender datum   vertoë, indien die dag [DD] is   weggelaat dan net die YYYY-MM-formaat   word toegelaat nie. Deur disallowing datums van   die vorm JJJJMM, die standaard vermy   verwarring met die afgekapte   verteenwoordiging JJMMDD (nog dikwels   gebruik).

Ek verkies die JJJJMMDD formaat, maar ek dink dit is omdat ek net geweet het dat om te begin met, en dit lyk vir my meer universele, nadat weg gedoen met karakters wat dalk oorweeg land spesifieke.

Ander wenke

Jy moet die kode wat jy gebruik om die soektog uit te voer te deel, maar ek dink jy is besig om 'n SQL navraag dinamiese gebruik van string concats om die navraag en die argumente te bou. Jy moet eerder gebruik 'n parameters navraag dan kan jy die data as 'n datum voorwerp en nie nodig om converto n string te slaag.

Byvoorbeeld, as jou navraag kon so iets wees

DateTime fromDate = DateTime.Now;

SqlCommand cmd = new SqlCommand(
  "select * from Orders where fromDT = @fromDate", con);

cmd.Parameters.AddWithValue("@fromDate", fromDate);

...

As 'n goeie newe-effek, dit sal jou risiko van SQL-inspuiting . Update: Na jou wysig wat nie verander die vraag konteks aansienlik, en ek moet erken dat ek Zero kennis van die .netTiers projek. Maar net uit nuuskierigheid Het jy al probeer net direk verby die datum gevalle as in die volgende?

AppointmentQuery aq = new AppointmentQuery(true, true); 
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate); 
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate); 
AppointmentService aSvc = new AppointmentService(); 
TList<Appointment> appointmentsList = aSvc.Find(aq); 

Persoonlik, ek gebruik altyd yyyy-MM-dd. Dit maak dit ook sortable as 'n string.

Maar 'n datum is 'n datum is 'n datum. Daar is geen behoefte om die datum te verander na 'n string. In NET, gebruiker DateTime.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top