Een toepassing bijwerken vanaf SQL Server 2005 Native Client
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Belangrijk
SQL Server Native Client (SNAC) wordt niet geleverd met:
- SQL Server 2022 (16.x) en latere versies
- SQL Server Management Studio 19 en latere versies
De SQL Server Native Client (SQLNCLI of SQLNCLI11) en de verouderde Microsoft OLE DB-provider voor SQL Server (SQLOLEDB) worden niet aanbevolen voor de ontwikkeling van nieuwe toepassingen.
Gebruik een van de volgende stuurprogramma's voor nieuwe projecten:
Voor SQLNCLI die als onderdeel van SQL Server Database Engine (versies 2012 tot en met 2019) wordt geleverd, raadpleegt u deze uitzondering voor de levenscyclus van ondersteuning.
In dit onderwerp worden de belangrijke wijzigingen in SQL Server Native Client besproken sinds SQL Server Native Client in SQL Server 2005 (9.x).
Wanneer u een upgrade uitvoert van Microsoft Data Access Components (MDAC) naar SQL Server Native Client, ziet u mogelijk ook enkele gedragsverschillen. Zie Een toepassing bijwerken naar een systeemeigen SQL Server-client vanuit MDAC-voor meer informatie.
SQL Server Native Client 9.0 is geleverd met SQL Server 2005 (9.x). SQL Server Native Client 10.0 is geleverd met SQL Server 2008 (10.0.x). SQL Server Native Client 10.5 is geleverd met SQL Server 2008 R2 (10.50.x). SQL Server Native Client 11.0 is geleverd met SQL Server 2012 (11.x) en SQL Server 2014 (12.x).
Gedrag gewijzigd in SQL Server Native Client Sinds SQL Server 2005 (9.x) | Beschrijving |
---|---|
OLE DB-pads alleen naar de gedefinieerde schaal. | Voor conversies waarbij geconverteerde gegevens naar de server worden verzonden, worden met SQL Server Native Client (vanaf SQL Server 2008 (10.0.x)-pads alleen de maximumlengte van datum/tijd- waarden gevolgd. SQL Server Native Client 9.0 is gevuld met 9 cijfers. |
Valideer DBTYPE_DBTIMESTAMP voor ICommandWithParameter::SetParameterInfo. | Sql Server Native Client (vanaf SQL Server 2008 (10.0.x)) implementeert de OLE DB-vereiste voor bScale in ICommandWithParameter::SetParameterInfo die moet worden ingesteld op de precisie van de breuk seconden voor DBTYPE_DBTIMESTAMP. |
De sp_columns opgeslagen procedure retourneert nu 'NEE' in plaats van 'NEE' voor de kolom IS_NULLABLE. | Vanaf SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) retourneert sp_columns opgeslagen procedure nu 'NEE' in plaats van 'NEE' voor een IS_NULLABLE kolom. |
SQLSetDescRec, SQLBindParameter en SQLBindCol voeren nu consistentiecontrole uit. | Vóór SQL Server Native Client 10.0 heeft het instellen SQL_DESC_DATA_PTR geen consistentiecontrole veroorzaakt voor een descriptortype in SQLSetDescRec, SQLBindParameter of SQLBindCol. |
SQLCopyDesc voert nu descriptorconsistentiecontrole uit. | Vóór SQL Server Native Client 10.0 heeft SQLCopyDesc geen consistentiecontrole uitgevoerd wanneer het SQL_DESC_DATA_PTR veld is ingesteld op een bepaalde record. |
SQLGetDescRec voert geen descriptorconsistentiecontrole meer uit. | Vóór SQL Server Native Client 10.0 heeft SQLGetDescRec een descriptorconsistentiecontrole uitgevoerd wanneer het SQL_DESC_DATA_PTR veld is ingesteld. Dit is niet vereist voor de ODBC-specificatie en in SQL Server Native Client 10.0 (SQL Server 2008 (10.0.x)) en latere versies, wordt deze consistentiecontrole niet meer uitgevoerd. |
Er is een andere fout geretourneerd wanneer de datum buiten het bereik valt. | Voor het datum/tijd- type wordt een ander foutnummer geretourneerd door SQL Server Native Client (vanaf SQL Server 2008 (10.0.x)) voor een datum buiten het bereik dan is geretourneerd in eerdere versies. Specifiek, SQL Server Native Client 9.0 heeft 22007 geretourneerd voor alle waarden van het bereikjaar in tekenreeksconversies naar datum/tijden SQL Server Native Client vanaf versie 10.0 (SQL Server 2008 (10.) 0.x)) retourneert 22008 wanneer de datum binnen het bereik valt dat wordt ondersteund door datetime2, maar buiten het bereik dat wordt ondersteund door datum/tijd of smalldatetime. |
datum/tijd waarde fractionele seconden afkappen en niet afronden als afronding de dag verandert. | Vóór SQL Server Native Client 10.0 is het clientgedrag voor datum/tijd- waarden die naar de server worden verzonden, afgerond op de dichtstbijzijnde 1/300e van een seconde. Vanaf SQL Server Native Client 10.0 veroorzaakt dit scenario een afkapping van fractionele seconden als de dag wordt afgerond. |
Mogelijke afkapping van seconden voor datum/tijd waarde. | Een toepassing die is gebouwd met SQL Server 2008 (10.0.x) Native Client (of hoger) die verbinding maakt met een SQL Server 2005-server, worden seconden en fractionele seconden afgekapt voor het tijdgedeelte van gegevens die naar de server worden verzonden als u verbinding maakt met een datum/tijdkolom met een type-id van DBTYPE_DBTIMESTAMP (OLE DB) of SQL_TIMESTAMP (ODBC) en een schaal van 0. Bijvoorbeeld: Invoergegevens: 1994-08-21 21:21:36.000 Ingevoegde gegevens: 1994-08-21 21:21:00.000 |
Ole DB-gegevensconversie van DBTYPE_DBTIME naar DBTYPE_DATE kan de dag niet meer veranderen. | Vóór SQL Server Native Client 10.0, als het tijdgedeelte van een DBTYPE_DATE binnen een halve seconde van middernacht was, heeft OLE DB-conversiecode de dag gewijzigd. Vanaf SQL Server Native Client 10.0 wordt de dag niet gewijzigd (fractionele seconden worden afgekapt en niet afgerond). |
IBCPSession::BCColFmt conversiewijzigingen. | Vanaf SQL Server Native Client 10.0 wordt een breukwaarde geëxporteerd wanneer u IBCPSession::BCOColFmt gebruikt om SQLDATETIME of SQLDATETIME te converteren naar een tekenreekstype. Wanneer u bijvoorbeeld het type SQLDATETIME converteert naar het type SQLNVARCHARMAX, worden eerdere versies van SQL Server Native Client geretourneerd 1989-02-01 00:00:00. SQL Server Native Client 10.0 en nieuwere versies retourneren 1989-02-01 00:00:00.00000000. |
De grootte van verzonden gegevens moet overeenkomen met de lengte die is opgegeven in SQL_LEN_DATA_AT_EXEC. | Wanneer u SQL_LEN_DATA_AT_EXEC gebruikt, moet de grootte van de gegevens overeenkomen met de lengte die u hebt opgegeven met SQL_LEN_DATA_AT_EXEC. U kunt SQL_DATA_AT_EXEC gebruiken, maar er zijn mogelijke prestatievoordelen voor het gebruik van SQL_LEN_DATA_AT_EXEC. |
Aangepaste toepassingen die gebruikmaken van de BCP-API kunnen nu een waarschuwing zien. | De BCP-API genereert een waarschuwingsbericht als de gegevenslengte groter is dan de opgegeven lengte voor een veld voor alle typen. Deze waarschuwing werd eerder alleen gegeven voor tekentypen, maar wordt niet uitgegeven voor alle typen. |
Als u een lege tekenreeks invoegt in een sql_variant afhankelijk van een datum/tijd-type, wordt er een fout gegenereerd. | In SQL Server Native Client 9.0 heeft het invoegen van een lege tekenreeks in een sql_variant gebonden als een datum/tijd-type geen fout gegenereerd. Sql Server Native Client 10.0 (en hoger) genereert een fout in deze situatie. |
Strengere SQL_C_TYPE _TIMESTAMP en DBTYPE_DBTIMESTAMP parametervalidatie. | Vóór SQL Server 2008 (10.0.x) Native Client werden datum/tijd--waarden afgerond om de schaal van datum/tijd- en smalldatetime kolommen van SQL Server aan te passen. Sql Server 2008 (10.0.x) Native Client (en hoger) past de strengere validatieregels toe die zijn gedefinieerd in de ODBC-kernspecificatie voor fractionele seconden. Als een parameterwaarde niet kan worden geconverteerd naar het SQL-type met behulp van de schaal die is opgegeven of wordt geïmpliceerd door de clientbinding zonder afkapping van volgcijfers, wordt een fout geretourneerd. |
SQL Server kan verschillende resultaten retourneren wanneer een trigger wordt uitgevoerd. | Wijzigingen die zijn geïntroduceerd in SQL Server 2008 (10.0.x), kunnen ertoe leiden dat een toepassing verschillende resultaten retourneert uit een instructie waardoor een trigger werd uitgevoerd toen NOCOUNT OFF van kracht was. In deze situatie kan uw toepassing een fout genereren. Als u deze fout wilt oplossen, stelt u NOCOUNT ON in de trigger in of roept u SQLMoreResults aan om naar het volgende resultaat te gaan. |