Condividi tramite


Aggiornamento di un'applicazione da SQL Server 2005 Native Client

In questo argomento vengono illustrate le modifiche di rilievo apportate SQL Server Native Client 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 per 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.

Comportamento modificato in SQL Server Native Client 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) aggiunge 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 eseguono ora la verifica della coerenza. Prima di SQL Server Native Client 10.0, l'impostazione di SQL_DESC_DATA_PTR non ha causato una verifica di coerenza per qualsiasi tipo di descrittore in SQLSetDescRec, SQLBindParameter o SQLBindCol.
SQLCopyDesc esegue ora il controllo 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 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, un numero di errore diverso verrà restituito da SQL Server Native Client (a partire da SQL Server 2008) per una data non compreso nell'intervallo restituito nelle versioni precedenti.

In particolare, SQL Server Native Client 9.0 restituito 22007 per tutti i valori dell'anno non compreso nell'intervallo nelle conversioni datetimedi stringhe in e SQL Server Native Client a partire dalla versione 10.0 (SQL Server 2008) restituisce 22008 quando la data è compresa nell'intervallo supportato da datetime2 ma all'esterno dell'intervallo supportato da datetime o smalldatetime.
Il valore datetime tronca i secondi frazionari e non viene arrotondato se tale arrotondamento comporta la modifica del giorno. Prima di SQL Server Native Client 10.0, il comportamento del client per datetime i valori inviati al server consiste nell'arrotondarli al più vicino 1/300 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.
Possibile troncamento di secondi per il valore datetime. 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.

Ad 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, le versioni precedenti di SQL Server Native Client restituite

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.
Se si inserisce una stringa vuota in un oggetto sql_variant associato come tipo data/ora viene generato 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 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'applicazione da un'istruzione che ha causato l'esecuzione di un trigger quando NOCOUNT OFF era 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