Share via


從 MDAC 將應用程式更新至 SQL Server Native Client

SQL Server Native Client 與 Microsoft Data Access Components 之間有一些差異 (MDAC;從 Windows Vista 開始,資料存取元件現在稱為 Windows Data Access Components 或 Windows DAC)。雖然兩者都提供 SQL Server 資料庫的原生資料存取權,但是 SQL Server Native Client 是專為公開 SQL Server 2005 的新功能而設計,同時還保留了與舊版的回溯相容性。

本主題的資訊可幫助您更新 MDAC (或 Windows DAC) 應用程式,使其保持為 SQL Server 2005 中隨附的最新 SQL Server Native Client 版本。為了讓這個應用程式保持為 SQL Server 2008 R2 中隨附的最新 SQL Server Native Client 版本,請參閱<從 SQL Server 2005 Native Client 將應用程式更新至 SQL Server 2008 R2 Native Client>。

此外,雖然 MDAC 包含了使用 OLE DB、ODBC 和 ActiveX Data Objects (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 資料類型。

  • 從 SQL Server 7.0 和更新版本開始,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 中導入的 xml 資料類型。

  • SQL Server Native Client 支援只利用連接字串屬性來設定用戶端網路程式庫。如果您需要更完整的網路程式庫組態,您必須使用 SQL Server 組態管理員。

  • SQL Server Native Client 與 odbcbcp.dll 不相容。您必須重建使用 ODBC 和 bcp API 的應用程式來連結 sqlncli10.lib,以便能夠使用 SQL Server Native Client。

  • Microsoft OLE DB provider for ODBC (MSDASQL) 不支援 SQL Server Native Client。如果您要使用 MDAC SQLODBC 驅動程式搭配 MSDASQL 或使用 MDAC SQLODBC 驅動程式搭配 ADO,請在 SQL Server Native Client 中使用 OLE DB。

  • MDAC 連接字串可以針對 Trusted_Connection 關鍵字使用布林值 (true)。SQL Server Native Client 連接字串必須使用 yes 或 no。

  • 警告和錯誤發生了些微的變更。伺服器傳回的警告和錯誤現在保持與傳遞給 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 時,伺服器錯誤 16947 會以 SQL_ERROR 的形式傳回。當定點更新或刪除無法更新或刪除資料列時,就會發生這個錯誤。當使用 SQL Server 2000 和舊版及 MDAC 連接到任何 SQL Server 版本時,伺服器錯誤 16947 會以警告 (SQL_SUCCESS_WITH_INFO) 的形式傳回。

  • SQL Server Native Client 會實作 IDBDataSourceAdmin 介面,這是之前未實作的選擇性 OLE DB 介面,但是只會實作這個選擇性介面的 CreateDataSource 方法。未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

  • SQL Server Native Client OLE DB 提供者會在 TABLES 和 TABLE_INFO 結構描述資料列集中傳回同義字,而且 TABLE_TYPE 會設定為 SYNONYM。

  • 資料類型 varchar(max)nvarchar(max)varbinary(max)xmludt 的傳回值或是大型物件類型無法傳回給 SQL Server 2005 之前的用戶端版本。如果您想要使用這些類型當做傳回值,則必須使用 SQL Server Native Client。

  • MDAC 允許在手動和隱含交易的開頭執行以下陳述式,但是 SQL Server Native Client 則不允許。它們必須在自動認可模式中執行。

    • 所有全文檢索作業 (索引和目錄 DDL)

    • 所有資料庫作業 (建立資料庫、改變資料庫、卸除資料庫)

    • 重新設定

    • 關機

    • 終止

    • 備份

  • 當 MDAC 應用程式連接到 SQL Server 時,SQL Server 2005 中導入的資料類型將會以 SQL Server 2000 相容的資料類型形式出現,如下表所示。

    SQL Server 2005 類型

    SQL Server 2000 類型

    varchar(max)

    text

    nvarchar(max)

    ntext

    varbinary(max)

    image

    udt

    varbinary

    xml

    ntext

    此類型對應會影響資料行中繼資料傳回的值。例如,text 資料行大小的最大值為 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 可支援快照集交易隔離 (在程式設計的詞彙中,使用資料列版本控制的讀取認可交易隔離與讀取認可的交易相同)。如需詳細資訊,請參閱<選擇以資料列版本控制為基礎的隔離等級>。