從 MDAC 將應用程式更新至 SQL Server Native Client
SQL Server Native Client與 Microsoft Data Access Components (MDAC 之間有許多差異;從 Windows Vista 開始,資料存取元件現在稱為 Windows 資料存取元件,或 Windows DAC) 。 雖然兩者都提供SQL Server資料庫的原生資料存取權,但SQL Server Native Client特別設計來公開 SQL Server 2005 的新功能,同時維持與舊版的回溯相容性。
本主題中的資訊可協助更新 MDAC (或 Windows DAC) 應用程式,以使用 SQL Server 2005 中包含的SQL Server Native Client版本。 若要協助您讓此應用程式成為 2014 SQL Server隨附的SQL Server Native Client版本,請參閱從 SQL Server 2005 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 會提供類似追蹤、管理控制項和效能計數器的功能。
應用程式可以使用 OLE DB 核心服務搭配SQL Server Native Client,但如果使用 OLE DB 資料指標引擎,則應該使用資料類型相容性選項來避免任何可能發生的潛在問題,因為資料指標引擎不知道新的 SQL Server 2005 資料類型。
SQL Server Native Client支援存取先前SQL Server資料庫。
SQL Server Native Client不包含 XML 整合。 SQL Server Native Client支援 SELECT ...FOR XML 查詢,但不支援任何其他 XML 功能。 不過,SQL Server Native Client支援
xml
SQL Server 2005 中引進的資料類型。SQL Server Native Client僅支援使用連接字串屬性來設定用戶端網路程式庫。 如果您需要更完整的網路程式庫組態,您必須使用 SQL Server 組態管理員。
SQL Server Native Client與 odbcbcp.dll 不相容。 使用 ODBC 和bcp API 的應用程式必須重建,才能與 sqlncli11.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
或否。警告和錯誤發生了些微的變更。 當傳遞至SQL Server Native Client時,伺服器傳回的警告和錯誤現在會保留相同的嚴重性。 如果您依賴特定警告和錯誤的截獲,您應該確定您已經徹底測試過您的應用程式。
SQL Server Native Client比 MDAC 更嚴格的錯誤檢查,這表示某些不符合 ODBC 和 OLE DB 規格的應用程式可能會有不同的行為。 例如,SQLOLEDB 提供者並未強制執行參數名稱必須以 '@' 開頭的規則,但 OLE DB 提供者SQL Server Native Client。
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的形式傳回。 當定點更新或刪除無法更新或刪除資料列時,就會發生這個錯誤。 使用 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。
資料類型 、
nvarchar(max)
、、varbinary(max)
xml
、udt
或其他大型物件類型的傳回值varchar(max)
,無法傳回早于 SQL Server 2005 的用戶端版本。 如果您想要使用這些類型做為傳回值,則必須使用 SQL Server Native Client。MDAC 允許在手動和隱含交易開始時執行下列語句,但SQL Server Native Client不會執行。 它們必須在自動認可模式中執行。
所有全文檢索作業 (索引和目錄 DDL)
所有資料庫作業 (建立資料庫、改變資料庫、卸除資料庫)
重新設定
Shutdown
終止
Backup
當 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 會將資料行的大小上限報告為 SQL_SS_LENGTH_UNLIMITED,而 SQL Server Native Client OLE DB 會根據平臺報告資料行的大小varchar(max)
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支援快照集交易隔離。 (在程式設計的詞彙中,使用資料列版本設定的讀取認可交易隔離與讀取認可的交易相同)。