Condividi tramite


Aggiornamento di un'applicazione a SQL Server 2008 Native Client da SQL Server 2005 Native Client

SQL Server 2008 include SQL Server Native Client 10.0. In questo argomento vengono descritte le differenze di comportamento tra la versione corrente e le versioni precedenti di SQL Server Native Client.

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

Differenze di funzionamento in SQL Server Native Client 10.0

Descrizione

OLE DB applica il riempimento solo in base alla scala definita.

Per le conversioni in cui i dati convertiti vengono inviati al server, SQL Server Native Client 10.0 inserisce zeri finali nei dati solo fino alla lunghezza massima dei valori datetime. In SQL Server Native Client 9.0 e versioni precedenti veniva applicato un riempimento fino a un massimo di 9 cifre.

Convalida di DBTYPE_DBTIMESTAMP per ICommandWithParameter::SetParameterInfo.

SQL Server Native Client 10.0 implementa il requisito OLE DB per bScale in ICommandWithParameter::SetParameterInfo in base al quale deve essere impostato sulla precisione dei secondi frazionari per DBTYPE_DBTIMESTAMP.

La stored procedure sp_columns restituisce ora "NO" anziché "NO " per la colonna IS_NULLABLE.

In SQL Server Native Client 10.0 la stored procedure sp_columns ora restituisce "NO" anziché "NO " per una colonna IS_NULLABLE.

SQLSetDescRec, SQLBindParameter e SQLBindCol ora eseguono il controllo di consistenza.

Prima di SQL Server Native Client 10.0, l'impostazione di SQL_DESC_DATA_PTR non comportava un controllo di consistenza per alcun tipo di descrittore in SQLSetDescRec, SQLBindParameter o SQLBindCol.

SQLCopyDesc ora esegue il controllo di consistenza per i descrittori.

Prima di SQL Server Native Client 10.0, SQLCopyDesc non eseguiva un controllo di consistenza quando il campo SQL_DESC_DATA_PTR veniva impostato su un determinato record.

SQLGetDescRec non esegue più un controllo di consistenza per i descrittori.

Prima di SQL Server Native Client 10.0, SQLGetDescRec eseguiva un controllo di consistenza per i descrittori quando veniva impostato il campo SQL_DESC_DATA_PTR. Tale controllo non era richiesto dalla specifica ODBC e in SQL Server Native Client 10.0 non viene più eseguito.

Quando la data non è inclusa nell'intervallo consentito viene restituito un errore differente.

Per il tipo datetime, SQL Server Native Client 10.0 restituisce per una data non compresa nell'intervallo consentito un numero di errore diverso da quello restituito nelle versioni precedenti.

In particolare, SQL Server Native Client 9.0 restituiva il numero 22007 per tutti i valori di anno non compresi nell'intervallo consentito nelle conversioni di stringa a datetime, mentre SQL Server Native Client 10.0 restituisce il numero 22008 quando la data è compresa nell'intervallo supportato da datetime2 ma esterna all'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 client arrotondava i valori datetime inviati al server al valore 1/300 di un secondo più vicino. In SQL Server Native Client 10.0 questo scenario causa il troncamento dei secondi frazionari se l'arrotondamento comporta la modifica del giorno.

Possibile troncamento di secondi per il valore datetime.

In un'applicazione compilata con SQL Server 2008 Native Client (o versioni successive) che si connette a un server SQL Server 2005 (o versioni precedenti) verranno troncati i secondi e i secondi frazionari per la parte relativa all'ora 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 di 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.

Prima di SQL Server Native Client 10.0, se la parte relativa all'ora di un oggetto DBTYPE_DATE era compresa in un mezzo secondo dopo la mezzanotte, il codice di conversione OLE DB causava la modifica del giorno. In SQL Server Native Client 10.0 il giorno non viene modificato (i secondi frazionari vengono troncati ma non vengono arrotondati).

Modifiche relative alle conversioni IBCPSession::BCColFmt.

Quando si utilizza IBCPSession::BCOColFmt per convertire SQLDATETIME o SQLDATETIME in un tipo stringa, in SQL Server Native Client 10.0 viene esportato un valore frazionario. Quando ad esempio si converte il tipo SQLDATETIME nel tipo SQLNVARCHARMAX, le versioni precedenti di SQL Server Native Client restituivano 

1989-02-01 00:00:00. SQL Server Native Client 10.0 restituisce ora 1989-02-01 00:00:00.0000000.

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 oggetto sql_variant associato come tipo data/ora non generava alcun errore. In questa situazione SQL Server Native Client 10.0 genera correttamente un errore.

Convalida dei parametri SQL_C_TYPE _TIMESTAMP e DBTYPE_DBTIMESTAMP più restrittiva.

Prima di SQL Server 2008 Native Client, i valori datetime venivano arrotondati in base alla scala delle colonne datetime e  smalldatetime di SQL Server. SQL Server 2008 Native Client applica ora regole di convalida più restrittive definite nella specifica 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.

A causa delle modifiche apportate in SQL Server 2008, un'istruzione che ha causato l'esecuzione di un trigger con NOCOUNT OFF attivo potrebbe restituire risultati diversi a un'applicazione. In una situazione di questo tipo l'applicazione potrebbe generare un errore. Per risolverlo, impostare NOCOUNT ON nel trigger o chiamare SQLMoreResults per passare al risultato successivo.

Cronologia modifiche

Aggiornamento del contenuto

Aggiunta della descrizione di come troncare i secondi per la colonna datetime.