在ado中,有三种可能方式用于更新数据源。一个是通过直接sql语句,如insert, delete 或 update,或稍复杂、较成熟的存储过程。另一个是通过批更新,你一次可以向服务器递交某个表的新映射。第三个方法是使用服务器指针直接对字段更新。
ado .net完全支持前两种技术,这涉及到不是的对象和方法。至于服务器指针,需要做进一步的讨论和确认,但到目前为止,在ado .net中它们只得到有限的支持。
下面开始分析在ado .net中更新数据源的方法和技术。本月,我将重点放在直接sql命令和存储过程上。在以后的专栏中,我将同时详细介绍批更新和服务器指针。
ole db 和"管理"提供者
ado .net并不直接支持ole db提供者,但这并不是说你不能从ado .net中访问ole db提供者。对此,我只是要表明一个特殊的管理提供者总是对访问任何现有的有效ole db提供的调用进行预处理。出于这个原因,你的ado .net永远不会直接作为一个ole db客户。
管理提供者是在.net中工作的一种模块,它的工作方式与ole db在win32? 和 com环境中的工作方式相同。从任何角度来说,管理提供者是ole db的.net对应物。它们是简化了的组件,并不象ole db那样遵循复杂的通用的规范(如通用数据访问)。
更重要的是,管理提供者完全能在.net的通用语言运行时(common language runtime ,clr)环境中工作。相反,ole db提供者是一个老com对象,在.net环境中,它只能运行在非管理窗口中。
为了访问ado.net中的数据,你应当遵循典型ado会话中的同样步骤。首先,创建链接,通过连接字符串指定参数。接着,实例化命令对象,设置正确的命令字和行为,然后执行。最后,根据命令的期望输出,或者你操纵结果,或者关闭链接,将其余工作留给应用程序。
注意,在ado中可以减少一些步骤,如直接调用connection对象的execute方法。这种做法在ado .net中是不允许的,因为并不是所有类型的connection对象具有execute方法。
不同类型的链接对象?这又意味着什么呢?
ado .net要求你在链接时事先知道并指定将链接到的(管理)数据提供者的类型。在ado中,你拥有connection对象,这就足够了,而不必考虑获得和设置数据的物理通道。不论是使用ole db ,还是归结为odbc,通过供odbc使用的通用ole db提供者,ado 总是要求使用同种类型的connection对象。在ado .net中情况就不是这样了。
到目前为止,有两种类型的管理提供者,一个专门用于sql server 7.0 和 2000,另一个用于访问任何ole db提供者。通过管理提供者,容易辨别出这种设计方式与在ado中允许odbc数据源访问ole db的方式是相同的。
用于访问odbc数据源的第三方管理提供者现在处于测试阶段。事实上,用于ole db的管理提供者不支持ado中用于同odbc驱动对话的msdasql ole db提供者。
sql server是在system.data.sqlclient名称空间中定义它的类的。ole db 管理提供者大部分定义在system.data.oledb名称空间中。
在ado .net中,不存在通用而又有用的链接类。存在一个dbconnection类,其它其它特定于提供者的链接类从该类派生,但它是一个抽象类。作为原形设计,它是有用的,但它不会直接在应用程序中使用。
因此,为打开一个链接,必须使用下面的两个方法之一:sqlconnection 方法和 oledbconnection方法。如果目标是sql server 7.0, sql server 2000或更高版本,使用前者。如果目标是ole db提供者,就应当使用后者。如果需要通过odbc驱动器访问数据,就要使用odbc .net提供者的链接类(名为odbcconnection)。
要访问sql server数据库,使用直接管理提供者将产生更加有效的代码。然而,注意如果需要访问sql server6.5,那么就必须求助于ole db提供者,并使用oledbxxx类和用于ole db的管理提供者。
因此,在ado .net中有许多成对的类,如sqlconnection 和 oledbconnection, sqlcommand 和 oledbcommand, sqldatareader 和 oledbdatareader等等。尽管不同的对间最大的不同可能在于它的前缀,但如果说它们对编程接口是相同的,却是不对的。
可以确定的是,每对类做同样的事情,但它们所有的接口反映的是底层的数据提供者。例如,在sqlconnection对象上没有provider属性,而在类中没有packetsize 或 workstationid 概念。
在本文的后面部分,我将使用sql server管理提供者,这将意味着面向数据的ado .net类将带有sql前缀。在先前否认声明有效的前提下,不需要对代码进行修改或进行有限修改,它就能工作,对于由ole db提供者暴露的数据源也是一样的。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器