Aggiornamento di un'applicazione da MDAC a SQL Server Native Client
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Importante
SQL Server Native Client (SNAC) non viene fornito con:
- SQL Server 2022 (16.x) e versioni successive
- SQL Server Management Studio 19 e versioni successive
SQL Server Native Client (SQLNCLI o SQLNCLI11) e il provider Microsoft OLE DB legacy per SQL Server (SQLOLEDB) non sono consigliati per lo sviluppo di nuove applicazioni.
Per i nuovi progetti, usare uno dei driver seguenti:
Per SQLNCLI fornito come componente del motore di database di SQL Server (versioni dal 2012 al 2019), vedere questa Eccezione relativa al ciclo di vita del supporto.
Esistono diverse differenze tra SQL Server Native Client e Microsoft Data Access Components (MDAC; a partire da Windows Vista, i componenti di accesso ai dati sono ora denominati Componenti di Accesso ai dati di Windows o Windows DAC). Sebbene entrambi forniscano l'accesso ai dati nativi ai database di SQL Server, SQL Server Native Client è stato progettato specificamente per esporre le nuove funzionalità di SQL Server 2005 (9.x), mantenendo allo stesso tempo la compatibilità con le versioni precedenti.
Le informazioni contenute in questo argomento consentono di aggiornare l'applicazione MDAC (o Windows DAC) in modo che sia aggiornata con la versione di SQL Server Native Client inclusa in SQL Server 2005 (9.x). Per rendere questa applicazione aggiornata con la versione di SQL Server Native Client fornita in SQL Server, vedere Aggiornamento di un'applicazione da SQL Server 2005 Native Client.
Nota
SQL Server Native Client è stato rimosso da SQL Server 2022 (16.x).
Inoltre, anche se MDAC contiene componenti per l'uso di OLE DB, ODBC e ActiveX Data Objects (ADO), SQL Server Native Client implementa solo OLE DB e ODBC (anche se ADO può accedere alla funzionalità di SQL Server Native Client).
SQL Server Native Client e MDAC differiscono nelle altre aree seguenti:
Gli utenti che usano ADO per accedere a un provider SQL Server Native Client possono trovare meno funzionalità di filtro rispetto a quando hanno eseguito l'accesso a un provider SQL OLE DB.
Se un'applicazione ADO usa SQL Server Native Client e tenta di aggiornare una colonna calcolata, verrà segnalato un errore. Con MDAC l'aggiornamento è stato accettato ma ignorato.
SQL Server Native Client è un singolo file DLL (Dynamic Link Library). Il numero di interfacce esposte pubblicamente è stato ridotto al minimo, per facilitare la distribuzione e limitare al tempo stesso i rischi legati alla sicurezza.
Sono supportate solo le interfacce OLE DB e ODBC.
Il provider OLE DB di SQL Server Native Client e i nomi dei driver ODBC sono diversi da quelli usati con MDAC.
La funzionalità accessibile dall'utente fornita dai componenti MDAC è disponibile quando si usa SQL Server Native Client. Le più importanti sono le seguenti: pool di connessioni, supporto ADO e supporto del cursore del client. Quando si usa una di queste funzionalità, SQL Server Native Client fornisce solo la connettività del database. MDAC fornisce funzionalità come la traccia, i controlli di gestione e i contatori delle prestazioni.
Le applicazioni possono usare i servizi di base OLE DB con SQL Server Native Client, ma se si usa il motore di cursore OLE DB, è consigliabile usare l'opzione di compatibilità dei tipi di dati per evitare potenziali problemi che potrebbero verificarsi perché il motore di cursore non conosce i nuovi tipi di dati di SQL Server 2005 (9.x).
SQL Server Native Client supporta l'accesso ai database di SQL Server precedenti.
SQL Server Native Client non contiene l'integrazione XML. SQL Server Native Client supporta SELECT ... Query FOR XML, ma non supporta altre funzionalità XML. SQL Server Native Client supporta tuttavia il tipo di dati xml introdotto in SQL Server 2005 (9.x).
SQL Server Native Client supporta la configurazione delle librerie di rete lato client usando solo gli attributi stringa di connessione. Per una configurazione delle libreria di rete più completa, è necessario usare Gestione configurazione SQL Server.
SQL Server Native Client non è compatibile con odbcbcp.dll. Le applicazioni che usano api ODBC e bcp devono essere ricompilate per collegarsi a sqlncli11.lib per usare SQL Server Native Client.
SQL Server Native Client non è supportato dal provider Microsoft OLE DB per ODBC (MSDASQL). Se si usa il driver SQLODBC MDAC con il driver MSDASQL o MDAC SQLODBC con ADO, usare OLE DB in SQL Server Native Client..
Le stringhe di connessione MDAC consentono l'utilizzo di un valore booleano (true) per la parola chiave Trusted_Connection. Un stringa di connessione di SQL Server Native Client deve usare sì o no.
Gli avvisi e gli errori non hanno subito modifiche particolarmente rilevanti. Gli avvisi e gli errori restituiti dal server mantengono ora la stessa gravità quando vengono passati a SQL Server Native Client. Se l'intercettazione di determinati avvisi ed errori riveste un'importanza particolare, è necessario assicurarsi che l'applicazione sia stata sottoposta a test approfonditi.
SQL Server Native Client ha un controllo degli errori più rigoroso di MDAC, il che significa che alcune applicazioni che non sono conformi rigorosamente alle specifiche ODBC e OLE DB possono comportarsi in modo diverso. Ad esempio, il provider SQLOLEDB non ha applicato la regola che i nomi dei parametri devono iniziare con '@' per i parametri dei risultati, ma il provider OLE DB di SQL Server Native Client.
SQL Server Native Client si comporta in modo diverso rispetto a MDAC per quanto riguarda le connessioni non riuscite. Ad esempio, MDAC restituisce i valori delle proprietà memorizzati nella cache per una connessione non riuscita, mentre SQL Server Native Client segnala un errore all'applicazione chiamante.
SQL Server Native Client non genera eventi di Visual Studio Analyzer, ma genera invece eventi di traccia di Windows.
SQL Server Native Client non può essere usato con perfmon. Perfmon è un strumento di Windows disponibile solo con i DSN che utilizzano il driver MDAC SQLODBC incluso in Windows.
Quando SQL Server Native Client è connesso a SQL Server 2005 (9.x) e versioni successive, l'errore del server 16947 viene restituito come SQL_ERROR. Tale errore si verifica quando tramite un'eliminazione o un aggiornamento posizionato non è possibile aggiornare o eliminare una riga. Con MDAC, in caso di connessione a una versione qualsiasi di SQL Server, l'errore del server 16947 viene restituito come avviso (SQL_SUCCESS_WITH_INFO).
SQL Server Native Client implementa l'interfaccia IDBDataSourceAdmin , che è un'interfaccia OLE DB facoltativa non implementata in precedenza, ma viene implementato solo il metodo CreateDataSource di questa interfaccia facoltativa. Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.
Il provider OLE DB di SQL Server Native Client restituisce sinonimi nei set di righe dello schema TABLES e TABLE_INFO, con TABLE_TYPE impostato su SYNONYM.
I valori restituiti del tipo di dati varchar(max), nvarchar(max), varbinary(max), xml, udt o altri tipi di oggetti di grandi dimensioni non possono essere restituiti alle versioni client precedenti a SQL Server 2005 (9.x). Se si desidera usare questi tipi come valori restituiti, è necessario usare SQL Server Native Client.
MDAC consente l'esecuzione delle istruzioni seguenti all'inizio di transazioni manuali e implicite, ma SQL Server Native Client non lo fa. L'esecuzione deve avvenire in modalità autocommit.
Tutte le operazioni full-text (DLL indice e catalogo)
Tutte le operazioni del database (creazione, modifica ed eliminazione del database)
Riconfigurare
Arresto
Kill (Uccidi)
Backup
Quando le applicazioni MDAC si connettono a SQL Server, i tipi di dati introdotti in SQL Server 2005 (9.x) verranno visualizzati come tipi di dati compatibili con SQL Server 2000 (8.x) come illustrato nella tabella seguente.
Tipo di SQL Server 2005 Tipo di SQL Server 2000 varchar(max) Testo nvarchar(max) ntext varbinary(max) Immagine udt varbinary xml ntext Questo mapping dei tipi influisce sui valori restituiti per i metadati delle colonne. Ad esempio, una colonna di testo ha una dimensione massima di 2.147.483.647, ma SQL Server Native Client ODBC segnala le dimensioni massime delle colonne varchar(max) come SQL_SS_LENGTH_UNLIMITED e SQL Server Native Client OLE DB segnala le dimensioni massime delle colonne varchar(max) come 2.147.483.647 o -1, a seconda della piattaforma.
SQL Server Native Client consente ambiguità nelle stringa di connessione (ad esempio, alcune parole chiave possono essere specificate più volte e le parole chiave in conflitto possono essere consentite con risoluzione in base alla posizione o alla precedenza) per motivi di compatibilità con le versioni precedenti. Le versioni future di SQL Server Native Client potrebbero non consentire ambiguità nelle stringa di connessione. È consigliabile modificare le applicazioni per usare SQL Server Native Client per eliminare qualsiasi dipendenza da stringa di connessione ambiguità.
Se si usa una chiamata ODBC o OLE DB per avviare le transazioni, esiste una differenza nel comportamento tra SQL Server Native Client e MDAC; le transazioni inizieranno immediatamente con SQL Server Native Client, ma le transazioni inizieranno dopo il primo accesso al database tramite MDAC. Questo può influire sul comportamento di stored procedure e batch in quanto per SQL Server è necessario che @@TRANCOUNT non cambi al termine dell'esecuzione di un batch o di una stored procedure.
Con SQL Server Native Client, ITransactionLocal::BeginTransaction causerà l'avvio immediato di una transazione. Con MDAC l'avvio della transazione viene ritardato fino all'esecuzione da parte dell'applicazione di un'istruzione che ha richiesto una transazione in modalità implicita. Per altre informazioni, vedere SET IMPLICIT_TRANSACTIONS (Transact-SQL).
È possibile che si verifichino errori quando si usa il driver SQL Server Native Client con System.Data.Odbc per accedere a un computer server SQL Server che espone nuovi tipi di dati o funzionalità specifici di SQL Server. System.Data.Odbc fornisce un'implementazione ODBC generica e successivamente non espone funzionalità o estensioni specifiche del fornitore. Il driver SQL Server Native Client viene aggiornato per supportare in modo nativo le funzionalità più recenti di SQL Server. Per risolvere questo problema, è possibile ripristinare MDAC o eseguire la migrazione a System.Data.SqlClient.
SIA SQL Server Native Client che MDAC supportano l'isolamento delle transazioni read committed tramite il controllo delle versioni delle righe, ma solo SQL Server Native Client supporta l'isolamento delle transazioni snapshot. In termini di programmazione, l'isolamento della transazione Read Committed mediante il controllo delle versioni delle righe equivale a una transazione Read Committed.