ADO.NET 中的並存執行

更新: November 2007

在 .NET Framework 中,並存執行是指在安裝多個 .NET Framework 版本的電腦上執行應用程式 (單獨使用針對編譯該應用程式所用的版本) 的能力。如需設定並存執行的詳細資訊,請參閱並存執行

使用某個 .NET Framework 版本所編譯的應用程式可在不同的 .NET Framework 版本上執行。但是,我們建議您最好先針對已安裝的每個 .NET Framework 版本編譯應用程式版本,然後再個別執行。不論是上述哪一種狀況,您都應該了解 ADO.NET 各版本間的差異,因為它會影響應用程式的向前相容性或回溯相容性 (Backward Compatibility)。

向前相容性和回溯相容性

所謂向前相容性是指應用程式可以使用舊版的 .NET Framework 編譯,但仍可順利在新版的 .NET Framework 上執行。針對 .NET Framework 1.1 版所撰寫的 ADO.NET 程式碼可向前相容於更新版本。

所謂回溯相容性是指針對新版 .NET Framework 所編譯的應用程式,但仍可在舊版 .NET Framework 上繼續執行,而不會減損任何功能。當然,這不適用於新版的 .NET Framework 所引入的功能。

ODBC 的 .NET Framework 資料提供者

從 1.1 版開始,.NET Framework Data Provider for ODBC (System.Data.Odbc) 就包含在 .NET Framework 中。.NET Framework 1.0 版的開發人員可以從網路下載 ODBC 資料提供者,網址為資料存取和儲存開發人員中心 (英文)。已下載 .NET Framework Data Provider for ODBC 的命名空間為 Microsoft.Data.Odbc

如果您的應用程式是針對 .NET Framework 1.0 版開發的,並且使用 ODBC 資料提供者來連接至資料來源,而您想在 .NET Framework 1.1 (含) 以後版本上執行這個應用程式,則必須將 ODBC 資料提供者的命名空間更新為 System.Data.Odbc。然後,您還要為新版的 .NET Framework 重新編譯該程式。

如果您的應用程式是針對 .NET Framework 2.0 版或更新版本開發的,並且使用 ODBC 資料提供者來連接至資料來源,而您想在 .NET Framework 1.0 版上執行這個應用程式,則必須下載 ODBC 資料提供者並將它安裝在 .NET Framework 1.0 版的系統上。接下來,您必須將 ODBC 資料提供者的命名空間變更為 Microsoft.Data.Odbc,並為 .NET Framework 1.0 版重新編譯這個應用程式。

Oracle 的 .NET Framework 資料提供者

從 1.1 版開始,.NET Framework Data Provider for Oracle (System.Data.OracleClient) 就包含在 .NET Framework 中。.NET Framework 1.0 版的開發人員可以從網路下載這個資料提供者,網址為資料存取及儲存開發人員中心 (英文)。

如果您的應用程式是針對 <token>dnprdnshort</token> 2.0 版或更新版本開發的,並且使用此資料提供者來連接至資料來源,而您想在 <token>dnprdnshort</token> 1.0 版上執行這個應用程式,則必須下載此資料提供者並將它安裝在 <token>dnprdnshort</token> 1.0 版的系統上。

程式碼存取安全性

.NET Framework 1.0 版中的 .NET Framework 資料提供者 (System.Data.SqlClientSystem.Data.OleDb) 是以 FullTrust 權限執行的必要項目。如果您想在權限小於 FullTrust 的區域中嘗試使用 .NET Framework 1.0 版的 .NET Framework 資料提供者,結果就會出現 SecurityException

不過,從 .NET Framework 2.0 版開始,您就可以在部分信任的區域中使用所有 .NET Framework 資料提供者。此外,系統會將新的安全性功能加入到 .NET Framework 1.1 版的 .NET Framework 資料提供者。這個功能可讓您限制能在特定安全性區域中使用的連接字串。您也可以在特定安全性地區內停用空白密碼。如需詳細資訊,請參閱程式碼存取安全性和 ADO.NET

因為安裝的每個 .NET Framework 都有個別的 Security.config 檔,所以安全性設定沒有相容性問題。但是,如果您的應用程式有使用 .NET Framework 1.1 (含) 以後版本所包含之 ADO.NET 的其他安全性功能,您就無法將應用程式散發到 1.0 版系統上。

SqlCommand 之執行

從 .NET Framework 1.1 版開始,ExecuteReader 在資料來源執行命令的方式就已變更。

在 .NET Framework 1.0 版中,ExecuteReader 會在 sp_executesql 預存程序的內容中執行所有命令。結果,凡是會影響連接狀態的命令 (例如,SET NOCOUNT ON) 只適用於目前命令的執行。若連接已開啟,連接狀態就不會因為任何後續命令的執行而被修改。

在 .NET Framework 1.1 (含) 以後版本中,只有當命令包含參數時,ExecuteReader 才會在 sp_executesql 預存程序的內容中執行命令,以便得到較佳效能。這樣的結果是,若連接已開啟,凡是會影響連接狀態的命令 (它包含於非參數化命令中) 都會修改已執行之所有後續命令的連接狀態。

請考慮使用下列在 ExecuteReader 呼叫中執行的命令批次。

SET NOCOUNT ON;
SELECT * FROM dbo.Customers;

在 .NET Framework 1.1 (含) 以後版本中,若連接已開啟,則 NOCOUNT 對於所執行的所有後續命令都會保持為 ON。而在 .NET Framework 1.0 版中,NOCOUNT 只有對目前執行的命令才會是 ON。

如果您有使用任一 .NET Framework 版本的 ExecuteReader 行為,這個變更會影響應用程式的向前和回溯相容性。

若應用程式會在 .NET Framework 的之前和以後版本上執行,則您可以撰寫程式碼來確保它在不同版本上的行為是相同的。如果您想要確保某個命令會針對所有後續命令修改連接的狀態,我們建議您使用 ExecuteNonQuery 來執行命令。如果您想要確保命令不會針對所有後續命令修改連接,則我們建議您在命令中加入要重設連接狀態的命令。例如:

SET NOCOUNT ON;
SELECT * FROM dbo.Customers;
SET NOCOUNT OFF;

Microsoft SQL Server Native Client

Microsoft SQL Server Native Client 在單一原生動態連結程式庫 (OLE) 中包含 SQL OLE DB 提供者和 SQL ODBC 驅動程式,可支援使用 Microsoft SQL Server 之機器碼 (Native-Code) API (ODBC、OLE DB 和 ADO) 的應用程式。您應該使用 SQL Server Native Client 而非 Microsoft Data Access Components (MDAC) 來建立新的應用程式或強化需要運用 SQL Server 2005 所導入之功能 (例如 Multiple Active Result Set (MARS)、查詢通知、使用者定義型別 (UDT) 和 XML 資料型別支援) 的現有應用程式。

Microsoft Data Access Components (MDAC)

OLE DB 和 ODBC 的 .NET Framework 資料提供者要求在所有 .NET Framework 版本中安裝 MDAC 2.6 (含) 以後版本,但建議您使用 MDAC 2.8 SP1。雖然此類需求不會造成並存執行的問題,但請注意,MDAC 目前並不支援並存執行。因此,在針對您的安裝進行 MDAC 元件升級前,請務必要驗證您的應用程式在新版本上能繼續正確運作。

如需 MDAC 的詳細資訊,請參閱資料存取和儲存開發人員中心 (英文)。

Windows Data Access Components (Windows DAC)

Windows Data Access Components (Windows DAC) 6.0 是 Windows Vista 所包含的一組技術,可提供跨企業存取資訊的功能。這些技術包括 MDAC 所包含之資料存取技術的最新版本:Microsoft ActiveX Data Objects (ADO)、OLE DB 和 Microsoft 開放式資料庫連接 (Open Database Connectivity,ODBC)。

如需 Windows DAC 的詳細資訊,請參閱 Windows Data Access Components SDK 概觀 (英文)。

請參閱

其他資源

ADO.NET 概觀

擷取和修改 ADO.NET 中的資料