共用方式為


並存執行和 ADO.NET

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

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

向前相容性和回溯相容性

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

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

雖然 .NET Framework 的 ADO.NET 元件已設計為向前和回溯相容 (新功能除外),但對於一些會影響應用程式向前或回溯相容的問題您應該要知道。

下列各節說明並存執行時會影響 ADO.NET 程式碼向前或回溯相容性的問題,包含:

  • ODBC 的 .NET Framework 資料提供者

  • Oracle 的 .NET Framework 資料提供者

  • 程式碼存取安全性

  • DataSet

  • SqlCommand 執行

  • Microsoft Data Access Components (MDAC)

ODBC 的 .NET Framework 資料提供者

從 1.1 版開始,其內就含有 ODBC 的 .NET Framework 資料提供者 (System.Data.Odbc),做為 .NET Framework 的一部分。.NET Framework 1.0 版的開發人員可以從網路下載 ODBC 資料提供者,網址為資料存取和儲存開發人員中心 (英文)。已下載的 ODBC 的 .NET Framework 資料提供者命名空間為 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 就加入 Oracle 的 .NET Framework 資料提供者 (System.Data.OracleClient)。.NET Framework 1.0 版的開發人員可以從網路下載資料提供者,網址為資料存取和儲存開發人員中心 (英文)。

如果您的應用程式是為 .NET Framework 2.0 版開發的,並且使用資料提供者來連接資料來源,而您想在 .NET Framework 1.0 版上執行這個應用程式,則必須下載資料提供者,並將它安裝到 .NET Framework 1.0 版系統中。

程式碼存取安全性

.NET Framework 1.0 版必須具有 FullTrust 使用權限才能執行 .NET Framework 資料提供者 (System.Data.SqlClientSystem.Data.OleDb)。如果想在使用權限小於 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 (含) 以後版本中,如果命令中含有參數,則 ExecuteReadersp_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 Data Access Components (MDAC)

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

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

請參閱

概念

ADO.NET 架構

其他資源

ADO.NET 概觀