[VB.NET] Oledb VS SqlClient Datum conversie...

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Chip.
  • Registratie: Mei 2006
  • Niet online
In een tabel heb ik een veld waarin een datum staat. Dit veld is van het type 'date'. Verder gebruik verder SQL Server 2005.

SQL:
1
SELECT CAST([datum] As date) AS tdatum FROM tbl


Wanneer ik m.b.v. oledb de datum selecteer uit de tabel wordt deze weergegeven als "yyyy-mm-dd"

Wanneer ik m.b.v. sqlclient de datum selecteer uit de tabel wordt deze weergeven als "dd/mm/yyyy hh:mm:ss"

Verder reageert het veld, bij SqlClient, ook totaal niet op CONVERT() en CAST() als ik een ander datum formaat wil hebben. Bij oledb reageert ie daar wel gewoon op.

Mijn vraag waarom reageert SqlClient niet op me formaat conversies zoals bij oledb?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:06
Het weergeven van een datum in een bepaald formaat, is niet iets wat je in de data-access moet afhandelen; dat is iets wat je in je presentatie-laag moet steken.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

De SqlClient negeert datum presentatie formaten. SqlClient is een geoptimaliseerde OleDB driver vooral bedoeld voor development in .NET. Ofwel als je via SqlClient een datum ophaalt in de database, dan krijg je deze 'native' terug. OleDB is een meer generieke manier van ophalen van informatie in de database en dien je als programmeur meer zaken zelf te regelen.

Maar dat had je ook kunnen lezen in de MSDN documentatie.
How SQL Server parses date and time values depends not only on the type system version and server version, but also on the server's default language and format settings. A date string that works for the date formats of one language might be unrecognizable if the query is executed by a connection that uses a different language and date format setting.

The Transact-SQL SET LANGUAGE statement implicitly sets the DATEFORMAT that determines the order of the date parts. You can use the SET DATEFORMAT Transact-SQL statement on a connection to disambiguate date values by ordering the date parts in MDY, DMY, YMD, YDM, MYD, or DYM order.

If you do not specify any DATEFORMAT for the connection, SQL Server uses the default language associated with the connection. For example, a date string of '01/02/03' would be interpreted as MDY (January 2, 2003) on a server with a language setting of United States English, and as DMY (February 1, 2003) on a server with a language setting of British English. The year is determined by using SQL Server's cutoff year rule, which defines the cutoff date for assigning the century value. For more information, see two digit year cutoff Option in SQL Server Books Online.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Chip.
  • Registratie: Mei 2006
  • Niet online
Niemand_Anders schreef op vrijdag 04 december 2009 @ 12:01:
De SqlClient negeert datum presentatie formaten. SqlClient is een geoptimaliseerde OleDB driver vooral bedoeld voor development in .NET. Ofwel als je via SqlClient een datum ophaalt in de database, dan krijg je deze 'native' terug. OleDB is een meer generieke manier van ophalen van informatie in de database en dien je als programmeur meer zaken zelf te regelen.

Maar dat had je ook kunnen lezen in de MSDN documentatie.

[...]
Ok bedankt voor de heldere uitleg.
Jammer genoeg was ikzelf niet op de pagina (http://msdn.microsoft.com/en-us/library/bb675168.aspx) gekomen, ik zat de hele tijd te zoeken in Transact-SQL Reference pagina's m.b.t. datum & tijd.