Share via


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

Esistono alcune differenze tra SQL Server Native Client e Microsoft Data Access Components (MDAC). (A partire da Windows Vista, i componenti di accesso ai dati vengono chiamati Windows Data Access Components o Windows DAC). Sebbene entrambe le tecnologie consentano l'accesso nativo ai dati dei database di SQL Server, SQL Server Native Client è stato appositamente progettato per esporre le nuove funzionalità di SQL Server 2005 pur mantenendo la compatibilità con le versioni precedenti.

In questo argomento viene illustrato come aggiornare l'applicazione MDAC (o Windows DAC) in base alla versione di SQL Server Native Client inclusa in SQL Server 2005. Per aggiornare l'applicazione alla versione di SQL Server Native Client fornita con SQL Server 2008, vedere Aggiornamento di un'applicazione a SQL Server 2008 Native Client da SQL Server 2005 Native Client.

Inoltre, sebbene MDAC contenga componenti per l'utilizzo 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 presentano inoltre alcune differenze nelle aree seguenti:

  • Gli utenti che utilizzano ADO per accedere a un provider di SQL Server Native Client potrebbero riscontrare una funzionalità di filtro meno avanzata quando accedono a un provider OLE DB SQL.

  • Se un'applicazione ADO utilizza SQL Server Native Client e tenta di aggiornare una colonna calcolata, viene generato un errore. Con MDAC l'aggiornamento è stato accettato ma ignorato.

  • SQL Server Native Client è un singolo file DLL (libreria a collegamento dinamico) autonomo. Il numero di interfacce esposte pubblicamente è stato ridotto al minimo, per facilitare la distribuzione e limitare al tempo stesso i rischi legati alla protezione.

  • 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 utilizzati con MDAC.

  • Le funzionalità accessibili all'utente fornite dai componenti MDAC sono disponibili durante l'utilizzo di SQL Server Native Client. Le più importanti sono le seguenti: pool di connessioni, supporto ADO e supporto del cursore del client. Quando una di esse viene utilizzata, 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 utilizzare i servizi di base di OLE DB con SQL Server Native Client, ma in presenza del motore del cursore di OLE DB, è necessario selezionare l'opzione della compatibilità dei tipi di dati per evitare qualsiasi problema potenziale che potrebbe sorgere quando il motore del cursore non conosce i nuovi tipi di dati di SQL Server 2005.

  • SQL Server Native Client supporta l'accesso a database di SQL Server precedenti a partire dalla versione SQL Server 7.0 fino alle più recenti.

  • SQL Server Native Client non include l'integrazione XML. SQL Server Native Client supporta le query SELECT … FOR, ma non supporta le altre funzionalità XML. Non supporta invece il tipo di dati xml introdotto in SQL Server 2005.

  • SQL Server Native Client supporta la configurazione delle librerie di rete sul lato client utilizzando solo gli attributi della stringa di connessione. Per una configurazione delle libreria di rete più completa, è necessario utilizzare Gestione configurazione SQL Server.

  • SQL Server Native Client non è compatibile con odbcbcp.dll. Le applicazioni che utilizzano le API di ODBC e bcp devono essere ricompilate in modo da essere collegate a sqlncli10.lib e poter quindi utilizzare SQL Server Native Client.

  • SQL Server Native Client non è supportato dal provider Microsoft OLE DB per ODBC (MSDASQL). Se si utilizza il driver MDAC SQLODBC con MSDASQL o il driver MDAC SQLODBC con ADO, utilizzare 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. È necessario che una stringa di connessione di SQL Server Native Client utilizzi yes o no.

  • Gli avvisi e gli errori non hanno subito modifiche particolarmente rilevanti. Quelli restituiti dal server mantengono ora lo stesso livello di 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 prevede un controllo degli errori più rigido rispetto a MDAC. Ciò significa che le applicazioni che non sono completamente conformi alle specifiche ODBC e OLE DB potrebbero avere un comportamento diverso. A differenza del provider OLE DB di SQL Server Native Client, il provider SQLOLEDB, ad esempio, non ha applicato la regola in base alla quale i nomi dei parametri devono iniziare con '@' per i parametri del risultato.

  • SQL Server Native Client e MDAC gestiscono i problemi di connessione in modo diverso. MDAC, ad esempio, restituisce 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, bensì eventi di traccia di Windows.

  • SQL Server Native Client non può essere utilizzato con perfmon. Perfmon è un strumento di Windows disponibile solo con i DSN che utilizzano il driver MDAC SQLODBC incluso con Windows.

  • Quando SQL Server Native Client è connesso a SQL Server 2005, l'errore server 16947 viene restituito come un SQL_ERROR. Tale errore si verifica quando un'eliminazione o un aggiornamento posizionato non riesce ad aggiornare o eliminare una riga. Con SQL Server 2000 e versioni precedenti, e con MDAC in caso di connessione a una versione qualsiasi di SQL Server, l'errore server 16947 viene restituito come un avviso (SQL_SUCCESS_WITH_INFO).

  • SQL Server Native Client implementa l'interfaccia IDBDataSourceAdmin, ovvero un'interfaccia OLE DB facoltativa non implementata in precedenza, di cui tuttavia viene implementato solo il metodo CreateDataSource. Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare 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 degli schemi 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 LOB non possono essere restituiti a versioni client precedenti a SQL Server 2005. Se si desidera utilizzare questi tipi come valori restituiti, è necessario utilizzare SQL Server Native Client.

  • A differenza di SQL Server Native Client, MDAC consente l'esecuzione delle istruzioni seguenti all'inizio delle transazioni manuali e implicite. 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)

    • Riconfigurazione

    • Chiusura

    • Esecuzione del comando Kill

    • Backup

  • Quando le applicazioni MDAC si connettono a SQL Server, i tipi di dati introdotti in SQL Server 2005 saranno visualizzati come tipi di dati compatibili con SQL Server 2000, come mostrato 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. Una colonna text, ad esempio, ha una dimensione massima di 2.147.483.647, ma SQL Server Native Client ODBC riporta la dimensione massima delle colonne varchar(max) come SQL_SS_LENGTH_UNLIMITED. SQL Server Native Client OLE DB, al contrario, riporta la dimensione massima delle colonne varchar(max) come 2.147.483.647 o -1, a seconda della piattaforma.

  • SQL Server Native Client supporta l'ambiguità nelle stringhe di connessione. In pratica, alcune parole chiave possono essere specificate più volte e, qualora siano in conflitto, viene adottata una risoluzione basata sulla posizione o sulla precedenza per garantire la compatibilità con le versioni precedenti. È possibile che nelle versioni successive di SQL Server Native Client tale ambiguità non sia più supportata. Quando si modificano le applicazioni, è consigliabile utilizzare SQL Server Native Client per eliminare l'eventuale dipendenza dall'ambiguità delle stringhe di connessione.

  • Se si utilizza una chiamata ODBC o OLE DB per avviare le transazioni, SQL Server Native Client e MDAC presentano un comportamento diverso. Con SQL Server Native Client le transazioni hanno inizio immediatamente, mentre con MDC si attende il primo accesso al database. Questo può influire sul comportamento di stored procedure e batch in quanto SQL Server richiede che @@TRANCOUNT non cambi al termine dell'esecuzione di un batch o di una stored procedure. Per ulteriori informazioni, vedere Rollback e commit in stored procedure e trigger.

  • Con SQL Server Native Client, ITransactionLocal::BeginTransaction causa 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 ulteriori informazioni, vedere SET IMPLICIT_TRANSACTIONS (Transact-SQL).

  • È possibile che vengano rilevati degli errori quando si utilizza il driver di SQL Server Native Client con System.Data.Odbc per accedere a un computer server di SQL Server che espone nuovi tipi di dati o funzionalità specifiche di SQL Server. System.Data.Odbc fornisce un'implementazione ODBC generica e successivamente non espone funzionalità o estensioni specifiche del fornitore. Il driver di SQL Server Native Client viene aggiornato per supportare a livello nativo le funzionalità più aggiornate di SQL Server. Per aggirare 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 mediante 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. Per ulteriori informazioni, vedere Scelta di livelli di isolamento basati sul controllo delle versioni delle righe.