從 MDAC 將應用程式更新至 SQL Server Native Client
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) 未隨附:
- SQL Server 2022 (16.x) 及更新版本
- SQL Server Management Studio 19 與更新版本
不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的應用開發。
針對新專案,請使用下列其中一個驅動程式:
針對 SQL Server 資料庫引擎 (2012 到 2019 版) 的隨附元件 SQLNCLI,請參閱支援生命週期例外狀況。
SQL Server Native Client 與 Microsoft 數據存取元件之間有許多差異(MDAC;從 Windows Vista 開始,數據存取元件現在稱為 Windows 數據存取元件或 Windows DAC)。 雖然兩者都提供原生數據存取 SQL Server 資料庫,但 SQL Server Native Client 已特別設計來公開 SQL Server 2005 (9.x) 的新功能,同時維持與舊版的回溯相容性。
本主題中的資訊可協助您更新 MDAC (或 Windows DAC) 應用程式,以使用 SQL Server 2005 (9.x) 中包含的 SQL Server Native Client 版本為最新狀態。 若要協助您讓此應用程式成為 SQL Server 隨附的 SQL Server Native Client 版本,請參閱 從 SQL Server 2005 Native Client 更新應用程式。
注意
SQL Server Native Client 已從 SQL Server 2022 (16.x) 中移除。
此外,雖然 MDAC 包含使用 OLE DB、ODBC 和 ActiveX 資料物件 (ADO) 的元件,但 SQL Server Native Client 只會實作 OLE DB 和 ODBC(雖然 ADO 可以存取 SQL Server Native Client 的功能)。
SQL Server Native Client 和 MDAC 在其他領域不同:
使用 ADO 存取 SQL Server Native Client 提供者的使用者可能會發現篩選功能比存取 SQL OLE DB 提供者時少。
如果 ADO 應用程式使用 SQL Server Native Client 並嘗試更新計算數據行,則會報告錯誤。 使用 MDAC 時,已接受更新,但已忽略。
SQL Server Native Client 是單一獨立式動態連結庫 (DLL) 檔案。 公開的介面已保留為最少量,這樣不但可便於散發,同時也可限制安全性風險。
僅支援 OLE DB 和 ODBC 介面。
SQL Server Native Client OLE DB 提供者和 ODBC 驅動程式名稱與搭配 MDAC 使用的驅動程序名稱不同。
使用 SQL Server Native Client 時,可以使用 MDAC 元件所提供的使用者存取功能。 這包括但不限於以下項目:連接共用、ADO 支援和用戶端資料指標支援。 使用上述任何功能時,SQL Server Native Client 僅提供資料庫連線能力。 MDAC 會提供類似追蹤、管理控制項和效能計數器的功能。
應用程式可以搭配 SQL Server Native Client 使用 OLE DB 核心服務,但如果使用 OLE DB 數據指標引擎,則應該使用數據類型相容性選項來避免任何可能發生的潛在問題,因為數據指標引擎不知道新的 SQL Server 2005 (9.x) 數據類型。
SQL Server Native Client 支援存取先前的 SQL Server 資料庫。
SQL Server Native Client 不包含 XML 整合。 SQL Server Native Client 支援 SELECT ...FOR XML 查詢,但不支援任何其他 XML 功能。 不過,SQL Server Native Client 確實支援 SQL Server 2005 (9.x) 中引進的 xml 數據類型。
SQL Server Native Client 僅支援使用 連接字串 屬性來設定用戶端網路連結庫。 如果您需要更完整的網路程式庫組態,您必須使用 SQL Server 組態管理員。
SQL Server Native Client 與 odbcbcp.dll 不相容。 若要使用 SQL Server Native Client,您必須重建使用 ODBC 和 bcp API 的應用程式,才能與 sqlncli11.lib 連結。
SQL Server Native Client 不支援 ODBC 的 Microsoft OLE DB 提供者 (MSDASQL)。 如果您使用 MDAC SQLODBC 驅動程式搭配 MSDASQL 或 MDAC SQLODBC 驅動程式搭配 ADO,請在 SQL Server Native Client 中使用 OLE DB。
MDAC 連接字串允許針對 Trusted_Connection 關鍵字使用布林值 (true)。 SQL Server Native Client 連接字串 必須使用是或否。
警告和錯誤發生了些微的變更。 當傳遞至 SQL Server Native Client 時,伺服器傳回的警告和錯誤現在會保留相同的嚴重性。 如果您依賴特定警告和錯誤的截獲,您應該確定您已經徹底測試過您的應用程式。
SQL Server Native Client 的錯誤檢查比 MDAC 更嚴格,這表示某些不符合 ODBC 和 OLE DB 規格的應用程式可能會有不同的行為。 例如,SQLOLEDB 提供者並未強制執行參數名稱必須以 『@』 開頭為結果參數的規則,但 SQL Server Native Client OLE DB 提供者會執行此規則。
SQL Server Native Client 在連線失敗時的行為與 MDAC 不同。 例如,MDAC 會傳回連線的快取屬性值,而 SQL Server Native Client 則會向呼叫的應用程式回報錯誤。
SQL Server Native Client 不會產生 Visual Studio Analyzer 事件,而是會產生 Windows 追蹤事件。
SQL Server Native Client 無法搭配 perfmon 使用。 Perfmon 是一種 Windows 工具,它只能搭配使用 Windows 隨附之 MDAC SQLODBC 驅動程式的 DSN 一起使用。
當 SQL Server Native Client 連線到 SQL Server 2005 (9.x) 和更新版本時,伺服器錯誤 16947 會以SQL_ERROR傳回。 當定點更新或刪除無法更新或刪除資料列時,就會發生這個錯誤。 使用 MDAC 時,如果連線到任何 SQL Server 版本,伺服器錯誤 16947 會以警告 (SQL_SUCCESS_WITH_INFO) 的形式傳回。
SQL Server Native Client 會實作 IDBDataSourceAdmin 介面,這是先前未實作的選擇性 OLE DB 介面,但只會 實作這個選擇性介面的 CreateDataSource 方法。 SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。
SQL Server Native Client OLE DB 提供者會傳回 TABLES 和 TABLE_INFO 架構數據列集中的同義字,TABLE_TYPE設定為 SYNONYM。
數據類型 varchar(max)、nvarchar(max)、varbinary(max)、xml、udt 或其他大型物件類型的傳回值,無法傳回早於 SQL Server 2005 (9.x) 的用戶端版本。 如果您想要使用這些類型做為傳回值,則必須使用 SQL Server Native Client。
MDAC 允許在手動和隱含交易開始時執行下列語句,但 SQL Server Native Client 不會執行。 它們必須在自動認可模式中執行。
所有全文檢索作業 (索引和目錄 DDL)
所有資料庫作業 (建立資料庫、改變資料庫、卸除資料庫)
重新設定
Shutdown
終止
Backup
當 MDAC 應用程式連線到 SQL Server 時,SQL Server 2005 (9.x) 中引進的資料類型會以與 SQL Server 2000 (8.x) 相容的資料類型顯示,如下表所示。
SQL Server 2005 類型 SQL Server 2000 類型 varchar(max) text nvarchar(max) ntext varbinary(max) image udt varbinary xml ntext 此類型對應會影響資料行中繼資料傳回的值。 例如,文字數據行的大小上限為 2,147,483,647,但 SQL Server Native Client ODBC 會將 varchar(max) 數據行的大小上限報告為 SQL_SS_LENGTH_UNLIMITED,而 SQL Server Native Client OLE DB 會根據平臺,將 varchar(max) 數據行的大小上限報告為 2,147,483,647 或 -1。
SQL Server Native Client 允許在 連接字串 中模棱兩可(例如,某些關鍵詞可以多次指定,而且基於位置或優先順序的優先順序而允許衝突的關鍵詞,以因回溯相容性而允許使用解析。 SQL Server Native Client 的未來版本可能無法在 連接字串 中模棱兩可。 修改應用程式以使用 SQL Server Native Client 來消除任何與 連接字串 模棱兩可的相依性時,這是很好的作法。
如果您使用 ODBC 或 OLE DB 呼叫來啟動交易,SQL Server Native Client 與 MDAC 的行為有差異;交易會立即以 SQL Server Native Client 開始,但交易會在使用 MDAC 的第一個數據庫存取之後開始。 這可能會影響預存程序和批次的行為,因為 SQL Server 會要求 @@TRANCOUNT 在批次或預存程序完成執行之後以及在批次或預存程序開始之前必須是相同的。
使用 SQL Server Native Client 時,ITransactionLocal::BeginTransaction 將立即啟動交易。 使用 MDAC 時,交易啟動會延遲到應用程式執行語句,而該語句需要隱含交易模式中的交易。 如需詳細資訊,請參閱 SET IMPLICIT_TRANSACTIONS (Transact-SQL)。
當您搭配 System.Data.Odbc 使用 SQL Server Native Client 驅動程式來存取公開新 SQL Server 特定數據類型或功能的 SQL Server 伺服器電腦時,可能會遇到錯誤。 System.Data.Odbc 提供一般 ODBC 實作,且後續不會公開廠商的特定功能或延伸模組。 (SQL Server Native Client 驅動程式已更新為原生支援最新的 SQL Server 功能。若要解決此問題,您可以還原為 MDAC,或移轉至 System.Data.SqlClient。
SQL Server Native Client 和 MDAC 都支援使用數據列版本設定來讀取認可交易隔離,但只有 SQL Server Native Client 支援快照集交易隔離。 (在程式設計的詞彙中,使用資料列版本設定的讀取認可交易隔離與讀取認可的交易相同)。