数据提供程序
SQL Server 2005和DB2 UDB 8.2都自带了.NET数据提供程序,使得.NET客户端程序能够访问数据库平台。这些“天生的”数据提供程序与基于OLE DB的数据提供程序相比,会给服务器应用程序带来更好的性能和可伸缩性。这两种数据提供程序有着非常相似的功能,都能执行基本的ADO.NET对象,包括 Connection、Command、DataReader、DataSet和DataAdapter。但它们有一个关键的差别:SQL Server .NET数据提供程序有两种模式可用,一个针对于客户端应用程序,另一个针对于服务器端应用程序。这一点对于服务器端应用程序开发特别重要,因为SQL Server服务器端.NET数据提供程序是一个驻于内存的程序,它不用像客户端数据提供程序那样去考虑网络流量的限制,因此,服务器端.NET数据提供程序能针对.NET数据库对象实现更好的性能。另外,服务器端数据提供程序还开放了一组只适合于服务器端代码的功能,例如服务器端游标。针对客户端应用程序的数据提供程序所开放的功能在System.Data.SqlClient命名空间中,而服务器端数据提供程序所开放的功能在 System.Data.Sqlserver命名空间中。在DB2 UDB 8.2中,只有单独的IBM.Data.DB2命名空间。DB2 .NET数据提供程序使用DB2Context对象来创建驻于内存的数据库连接。
在服务器端,它们同样有相似之处。DB2和SQL Server都支持使用.NET语言构建应用程序以及随后在服务器端部署。其实除了这一基本概念,这两种数据库平台对.NET的集成程度有着很大的差异。 DB2 UDB 8.2支持创建.NET存储过程和.NET用户定义函数。可是,Visual Studio IDE只支持创建DB2 UDB 8.2 .NET存储过程,DB2 UDB 8.2 .NET函数必须手工创建。与之相比,SQL Server 2005对.NET的支持要广泛的多。和DB2一样,SQL Server支持创建.NET存储过程和.NET用户定义函数。除此之外,SQL Server还支持.NET触发器、.NET用户定义类型(UDT)以及.NET用户定义聚集。所有这些对象的创建都被完全集成到Visual Studio 2005 IDE中了。能使用.NET语言构建存储过程和函数对数据库开发人员来说肯定是个好消息,这将使得他们能够实现更加复杂的商业逻辑和函数功能而不必受限于标准SQL的功能。这一点无疑是将.NET与数据库集成的关键所在,当然,使用.NET语言创建触发器、用户定义类型以及用户定义聚集也很有用。使用. NET语言创建触发器将使得触发器的代码能更加完全地封装商业逻辑,同时还能执行一些附加的操作,例如访问外部资源记录操作日志。使用.NET语言创建用户定义类型能使得数据库开发人员能扩展系统中原有的数据类型,这些用户定义类型能拥有自己独立的属性和操作符,这使得开发人员可以无缝地扩展原有的数据类型,在使用的时候就和原有的数据类型一样,具有各自的操作符和聚集。同样地,使用.NET创建用户定义聚集使开发人员能创建自定义的聚集操作应用于原有的数据类型或是用户自定义的数据类型。
除了这些基本的.NET功能,在.NET框架与各自的数据库服务器集成方面还有重大的差异。在下一部分中,我们将更深入地讨论.NET集成的细节。
.NET框架集成
Microsoft® .NET是用来把信息、人力、系统和设备联系在一起的一组Microsoft软件技术。.NET框架是构建和运行下一代软件应用程序和Web Service所必需的Windows组件。
.NET框架:
·支持超过二十种不同的编程语言。
·管理着大量的“管道”——有助于提高软件开发效率并使得开发人员的精力更加集中于核心商业逻辑代码上。
·使得构建、部署和管理一个安全的、健壮的以及性能卓越的应用程序比以前更加容易实现。
.NET框架由公共语言运行库(CLR)和统一分层的类库集合所组成。.NET CLR的职责主要包括集成语言的运行服务、强制安全性和对内存、进程以及线程的管理。在语言集成方面,CLR定义了通用类型系统(CTS),它描述了跨越所有.NET语言的基本数据类型以及关于那些数据类型的操作。.NET框架提供了大量的类集供开发人员应用于他们的应用程序中,这些类集涵盖了很多方面的内容,包括I/O、网络、文本处理、数据访问、加密、XML处理、Web Service等等。这样就允许开发人员能把精力主要集中在构建商业逻辑上而不是埋头于“管道”代码中,因为这些能在.NET框架的类集中找到。SQL Server 2005和IBM DB2 UDB 8.2中对.NET CLR的集成使得可以用任何一种.NET语言(包括C#、Visual Basic、C++以及J#)来开发数据库对象。
这两种不同的数据库平台和.NET框架集成的方式是完全不同的。SQL Server 2005数据库引擎将CLR宿于进程内,这意味着同时运行数据库引擎和.NET运行库只需要一个独立的操作系统进程。与之相比,DB2 UDB 8.2和.NET框架的集成采用的是“进程外”的模型。图1对不同的数据库CLR实现方式进行了直观描述。

