Condividi tramite


Aggiornamento di un'applicazione da SQL Server 2005 Native Client

Questo argomento illustra le modifiche di rilievo in SQL Server Native Client a partire da SQL Server Native Client in SQL Server 2005.

Quando si esegue l'aggiornamento da Microsoft Data Access Components (MDAC) a SQL Server Native Client, potrebbero verificarsi anche alcune differenze di comportamento. Per altre informazioni, vedere Aggiornamento di un'applicazione a SQL Server Native Client da MDAC.

SQL Server Native Client 9.0 fornito con SQL Server 2005. SQL Server Native Client 10.0 fornito con SQL Server 2008. SQL Server Native Client 10.5 fornito con SQL Server 2008 R2. SQL Server Native Client 11.0 fornito con SQL Server 2012 e SQL Server 2014.

Modifica del comportamento in SQL Server Native Client a partire da SQL Server 2005 Descrizione
In OLE DB viene applicato il riempimento solo in base alla scala definita. Per le conversioni in cui i dati convertiti vengono inviati al server, SQL Server Native Client (a partire da SQL Server 2008) esegue il pad degli zeri finali nei dati solo fino alla lunghezza massima dei datetime valori. In SQL Server Native Client 9.0 viene applicato un riempimento fino a un massimo di 9 cifre.
Convalida di DBTYPE_DBTIMESTAMP per ICommandWithParameter::SetParameterInfo. SQL Server Native Client (a partire da SQL Server 2008) implementa il requisito OLE DB per bScale in ICommandWithParameter::SetParameterInfo da impostare sulla precisione dei secondi frazionari per DBTYPE_DBTIMESTAMP.
La sp_columns stored procedure restituisce ora "NO" anziché "NO" per la colonna IS_NULLABLE. A partire da SQL Server Native Client 10.0 (SQL Server 2008), sp_columns la stored procedure restituisce ora "NO" anziché "NO" per una colonna IS_NULLABLE.
SQLSetDescRec, SQLBindParameter e SQLBindCol ora eseguono il controllo coerenza. Prima di SQL Server Native Client 10.0, l'impostazione SQL_DESC_DATA_PTR non ha causato una verifica coerenza per qualsiasi tipo di descrittore in SQLSetDescRec, SQLBindParameter o SQLBindCol.
SQLCopyDesc esegue ora il controllo della coerenza del descrittore. Prima di SQL Server Native Client 10.0, SQLCopyDesc non esegue una verifica coerenza quando il campo SQL_DESC_DATA_PTR è stato impostato su un record specifico.
SQLGetDescRec non esegue più una verifica di coerenza del descrittore. Prima di SQL Server Native Client 10.0, SQLGetDescRec ha eseguito una verifica di coerenza del descrittore quando è stato impostato il campo SQL_DESC_DATA_PTR. Non è stato richiesto dalla specifica ODBC e in SQL Server Native Client 10.0 (SQL Server 2008) e versioni successive, questa verifica coerenza non viene più eseguita.
Quando la data non è inclusa nell'intervallo consentito viene restituito un errore differente. Per il datetime tipo, per una data non compreso nell'intervallo restituito nelle versioni precedenti verrà restituito un numero di errore diverso da SQL Server Native Client (a partire da SQL Server 2008).

In particolare, SQL Server Native Client 9.0 ha restituito 22007 per tutti i valori di anno non compresi nell'intervallo nelle conversioni di stringhe in datetimee SQL Server Native Client a partire dalla versione 10.0 (SQL Server 2008) restituisce 22008 quando la data è compresa nell'intervallo supportato da ma al di fuori dell'intervallo supportato da datetime2datetime o smalldatetime.
datetime value tronca i secondi frazionari e non arrotonda se l'arrotondamento cambierà il giorno. Prima di SQL Server Native Client 10.0, il comportamento del client per datetime i valori inviati al server consiste nell'arrotondarli al 1/300 più vicino di un secondo. A partire da SQL Server Native Client 10.0, questo scenario causa un troncamento di secondi frazionari se l'arrotondamento cambia il giorno.
Troncamento possibile di secondi per datetime il valore. Un'applicazione compilata con SQL Server 2008 Native Client (o versione successiva) che si connette a un server SQL Server 2005 tronca i secondi e i secondi frazionari per la parte temporale dei dati inviati al server se si esegue l'associazione a una colonna datetime con un identificatore di tipo DBTYPE_DBTIMESTAMP (OLE DB) o SQL_TIMESTAMP (ODBC) e una scala pari a 0.

Per esempio:

Dati di input: 1994-08-21 21:21:36.000

Dati inseriti: 1994-08-21 21:21:00.000
La conversione dei dati OLE DB da DBTYPE_DBTIME a DBTYPE_DATE non può più causare la modifica del giorno. Nelle versioni precedenti a SQL Server Native Client 10.0 se la parte relativa all'ora di un tipo DBTYPE_DATE è entro mezzo secondo dalla mezzanotte, il codice di conversione OLE DB causa la modifica del giorno. A partire da SQL Server Native Client 10.0, il giorno non cambierà (i secondi frazionari vengono troncati e non arrotondati).
Modifiche della conversione IBCPSession::BCColFmt. A partire da SQL Server Native Client 10.0, quando si usa IBCPSession::BCOColFmt per convertire SQLDATETIME o SQLDATETIME in un tipo stringa, viene esportato un valore frazionario. Ad esempio, quando si converte il tipo SQLDATETIME in tipo SQLNVARCHARMAX, vengono restituite versioni precedenti di SQL Server Native Client

1989-02-01 00:00:00. SQL Server Native Client 10.0 e versioni successive restituiscono 1989-02-01 00:00:00.00000000.
Le dimensioni dei dati inviati devono corrispondere alla lunghezza specificata in SQL_LEN_DATA_AT_EXEC. Quando si utilizza SQL_LEN_DATA_AT_EXEC, le dimensioni dei dati devono corrispondere alla lunghezza specificata con SQL_LEN_DATA_AT_EXEC. È possibile utilizzare SQL_DATA_AT_EXEC ma l'utilizzo di SQL_LEN_DATA_AT_EXEC comporta vantaggi potenziali in termini di prestazioni.
Le applicazioni personalizzate che utilizzano l'API BCP ora possono visualizzare un avviso. L'API BCP genererà un messaggio di avviso se la lunghezza dei dati di tutti i tipi è superiore a quella specificata per un campo. In precedenza, questo avviso veniva visualizzato solo per i dati di tipo carattere e non per tutti i tipi.
L'inserimento di una stringa vuota in un sql_variant oggetto associato come tipo di data/ora genera un errore. In SQL Server Native Client 9.0 l'inserimento di una stringa vuota in un sql_variant oggetto associato come tipo di data/ora non ha generato un errore. SQL Server Native Client 10.0 (e versioni successive) genera correttamente un errore in questa situazione.
Convalida dei parametri SQL_C_TYPE _TIMESTAMP e DBTYPE_DBTIMESTAMP più restrittiva. Prima di SQL Server 2008 Native Client, datetime i valori sono stati arrotondati per adattarsi alla scala delle datetime colonne e smalldatetime di SQL Server. SQL Server 2008 Native Client (e versioni successive) applica le regole di convalida più rigorose definite nella specifica di base ODBC per i secondi frazionari. Se non è possibile convertire il valore di un parametro nel tipo SQL utilizzando la scala specificata o implicita dell'associazione client senza causare il troncamento delle cifre finali, viene restituito un errore.
Quando è in esecuzione un trigger, SQL Server potrebbe restituire risultati diversi. Le modifiche introdotte in SQL Server 2008 potrebbero causare la restituzione di risultati diversi da un'istruzione che ha causato l'esecuzione di un trigger quando NOCOUNT OFF è stato attivo. In una situazione di questo tipo l'applicazione potrebbe generare un errore. Per risolvere questo errore, impostare NOCOUNT ON nel trigger o chiamare SQLMoreResults per passare al risultato successivo.

Vedere anche

Programmazione in SQL Server Native Client