在 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 编译,但可以继续在较早版本的 .NET Framework 上运行而不丧失任何功能。 当然,这不包括新版本的 .NET Framework 中引入的功能。
ODBC .NET Framework 数据提供程序
从 1.1 版开始,适用于 ODBC 的 .NET Framework 数据提供程序 (System.Data.Odbc) 作为 .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 数据提供程序
从 1.1 版开始,适用于 Oracle 的 .NET Framework 数据提供程序 (System.Data.OracleClient) 作为 .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.SqlClient、System.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 使用本机代码 API(ODBC、OLE DB 和 ADO)。 应当使用 SQL Server Native Client 而非 Microsoft 数据访问组件 (MDAC) 来创建新的应用程序或增强需要利用 SQL Server 2005 中引入的功能(例如,多活动结果集 (MARS)、查询通知、用户定义的类型 (UDT) 和 XML 数据类型支持)的现有应用程序。
Microsoft 数据访问组件 (MDAC)
用于 OLE DB 和 ODBC 的 .NET Framework 数据提供程序要求在所有版本的 .NET Framework 中安装 MDAC 2.6 或更高版本,建议安装 MDAC 2.8 SP1。 虽然这一要求不会引入并行执行问题,但需注意的是 MDAC 目前并不支持并行执行。 因此,在为您的安装升级 MDAC 组件前,务必要验证您的应用程序在新版本中是否仍能正常运行。
有关 MDAC 的更多信息,请参见 Data Access and Storage Developer Center(数据访问和存储开发人员中心)。
Windows 数据访问组件 (Windows DAC)
Windows 数据访问组件 (Windows DAC) 6.0 是 Windows Vista 中包含的一组技术,可提供对整个企业内的信息的访问。 这些技术包括 MDAC 中的最新版本的数据访问技术:Microsoft ActiveX 数据对象 (ADO)、OLE DB 和 Microsoft 开放式数据库连接 (ODBC)。
有关 Windows DAC 的更多信息,请参见 Windows Data Access Components SDK Overview(Windows 数据访问组件 SDK 概述)。