Condividi tramite


Aggiornamento di un'applicazione da MDAC a SQL Server Native Client

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 dati Windows o Windows DAC). Anche se entrambi forniscono l'accesso ai dati nativi ai database SQL Server, SQL Server Native Client è stato progettato in modo specifico per esporre le nuove funzionalità di SQL Server 2005, 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 corrente con la versione di SQL Server Native Client inclusa in SQL Server 2005. Per facilitare l'aggiornamento di questa applicazione con la versione di SQL Server Native Client fornita in SQL Server 2014, vedere Aggiornamento di un'applicazione da SQL Server 2005 Native Client.

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:

  • Gli utenti che usano ADO per accedere a un provider di SQL Server Native Client possono trovare funzionalità di filtro inferiori a quando hanno 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 di libreria di collegamento dinamica autonoma (DLL). 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 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 viene usata 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, devono usare l'opzione di compatibilità dei tipi di dati per evitare eventuali potenziali problemi che potrebbero verificarsi perché il motore di cursore non ha conoscenza dei nuovi tipi di dati SQL Server 2005.

  • 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. Tuttavia, SQL Server Native Client supporta il xml tipo di dati introdotto in SQL Server 2005.

  • SQL Server Native Client supporta la configurazione delle librerie di rete lato client usando solo gli attributi della 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 sia LE API ODBC che bcp devono essere ricompilate per collegare 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 MDAC SQLODBC con MSDASQL o MDAC SQLODBC driver con ADO, usare OLE DB in SQL Server Native Client..

  • Le stringhe di connessione MDAC consentono un valore booleano (true) per la parola chiave Trusted_Connection . Una stringa di connessione SQL Server Native Client deve usare yes o no.

  • Gli avvisi e gli errori non hanno subito modifiche particolarmente rilevanti. Gli avvisi e gli errori restituiti dal server ora mantengono 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 rispetto a MDAC, che significa che alcune applicazioni che non sono conformi strettamente 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 SQL Server Native Client esegue.

  • SQL Server Native Client si comporta in modo diverso da 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 e versioni successive, viene restituito l'errore del server 16947 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 a partire da una delle prossime versioni di Microsoft 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 SQL Server Native Client restituisce sinonimi nei set di righe DI TABELLE e TABLE_INFO schema, con TABLE_TYPE impostato su SINONIMO.

  • I valori restituiti del tipo varchar(max)di dati , udtnvarchar(max)varbinary(max)xmlo altri tipi di oggetti di grandi dimensioni non possono essere restituiti alle versioni client precedenti a SQL Server 2005. Se si desidera usare questi tipi come valori restituiti, è necessario usare SQL Server Native Client.

  • MDAC consente l'esecuzione delle istruzioni seguenti all'inizio delle transazioni manuali e implicite, ma SQL Server Native Client non viene eseguita. 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

    • Shutdown

    • Kill

    • Backup

  • Quando le applicazioni MDAC si connettono a SQL Server, i tipi di dati introdotti in SQL Server 2005 verranno visualizzati come SQL Server tipi di dati compatibili con 2000, come illustrato nella tabella seguente.

    Tipo di SQL Server 2005 Tipo di SQL Server 2000
    varchar(max) text
    nvarchar(max) ntext
    varbinary(max) image
    udt varbinary
    xml ntext

    Questo mapping dei tipi influisce sui valori restituiti per i metadati delle colonne. Ad esempio, una text colonna ha una dimensione massima di 2.147.483.647, ma SQL Server Native Client ODBC segnala le dimensioni massime delle colonne come SQL_SS_LENGTH_UNLIMITED SQL Server Native Client e OLE DB segnala le dimensioni massime delle varchar(max) colonne come 2.147.483.647 o -1, a seconda della varchar(max) piattaforma.

  • SQL Server Native Client consente ambiguità nelle stringhe di connessione(ad esempio, alcune parole chiave possono essere specificate più di una volta e le parole chiave in conflitto possono essere consentite con la 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 stringhe di connessione. È consigliabile modificare le applicazioni da usare SQL Server Native Client per eliminare qualsiasi dipendenza dall'ambiguità della stringa di connessione.

  • 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 usando 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à immediatamente l'avvio 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 SQL Server Native Client driver con System.Data.Odbc per accedere a un computer server di SQL Server che espone nuovi tipi di dati o funzionalità specifici 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 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 con commit di lettura usando 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.

Vedere anche

Compilazione di applicazioni con SQL Server Native Client