.NET Framework 开发人员指南
并行执行和 ADO.NET

通过 .NET Framework 中的并行执行,可以在安装了多个 .NET Framework 版本的同一台计算机上使用编译应用程序所针对的版本独占执行应用程序。有关配置并行执行的详细信息,请参见并行 (Side-by-Side) 执行

使用 .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 数据访问组件 (MDAC)

ODBC .NET Framework 数据提供程序

ODBC .NET Framework 数据提供程序 (System.Data.Odbc) 从 1.1 版开始就作为 .NET Framework 的一部分提供。.NET Framework 1.0 版开发人员可以从 Data Access and Storage Developer Center 通过 Web 下载获得 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 数据提供程序

Oracle .NET Framework 数据提供程序 (System.Data.OracleClient) 从 1.1 版开始就作为 .NET Framework 的一部分提供。.NET Framework 1.0 版开发人员可以从 Data Access and Storage Developer Center 通过 Web 下载获得数据提供程序。

如果您有一个为 .NET Framework 2.0 版开发的应用程序,它使用数据提供程序连接到您的数据源。如果要在 .NET Framework 1.0 版上运行该应用程序,必须下载数据提供程序并将其安装到 .NET Framework 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 数据访问组件 (MDAC)

OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序要求在所有版本的 .NET Framework 上安装 MDAC 2.6 或更高版本,我们建议安装 MDAC 2.8 SP1。虽然这个要求并不会引入并行执行问题,但务必注意 MDAC 目前并不支持并行执行。因此,在为您的安装升级 MDAC 组件前,务必要验证在新版本下,您的应用程序是否还能正常运行。

有关 MDAC 的更多信息,请参见 Data Access and Storage Developer Center

请参见

标记 :


Page view tracker