设为首页收藏本站language 语言切换
查看: 1407|回复: 0
收起左侧

.net环境中数据库访问组件的应用

[复制链接]
发表于 2010-2-25 10:24:58 | 显示全部楼层 |阅读模式
<p >最近我写了一个.net环境下的C#动态链接库xmldb.dll。它仅包括一个XMLDBComponent类,这个类大大简化了数据库编程的工作量。举例来说,它可以执行一个sql查询,并以一个简单的调用方法把得到的数据转化成xml文档。<p >源代码包中包含三个工程文件。<p >● xmldblib建立库,xmldb.dll;<p >● xmldbtest是一个asp.net的测试程序;<p >● xmldbservice是一个web服务,它令使用不同机器和平台的用户都可以访问xmldb.dll;<p >除非特殊情况,样例代码都是用c#写的。<p >xmldbcomponent是用System.Data.OleDb 名字空间的类实现的。现在你仅使用一个类就可以在.net中完成所有的基本数据库工作,无需使用5个或更多的类。代价就是,你不能完全拥有.net框架类可给与的力量和控制。我不想要适应SQL sever而限制我的数据库,所以我不用System.Data.SqlClient 名字空间的类来构建自己的类,而宁愿用MS Access。System.Data.OleDb类不支持ODBC数据源是最糟糕的了。<p >代码仅在win2000,sql7和sql2000,以及MS Access数据库的环境中测试过。<p ><center><font color="#000099"><strong>简单的数据库访问</strong></font></center><p >首先,我们得创建一个XMLDBComponent对象的实例。这是通过调用静态的方法CreateObject(),如下:<p ><ccid_nobr><table align="center" border="1" bordercolordark="#FFFFFF" bordercolorlight="black" cellpadding="2" cellspacing="0" width="550"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>XMLDBLib.XMLDBComponent obj = XMLDBLib.XMLDBComponent.CreateObject(    &amp;quotrovider=myProvider;Database=myDB;Server=myServer;&amp;quot; +     &amp;quot;User ID=meassword=&amp;quot;);</ccid_code></pre></td></tr></table></ccid_nobr><p >上面代码中的参数是连接字符串。对象创建之后,下面的代码会执行一个sql查询,然后将返回的数据存成一个文件。<p ><ccid_nobr><table align="center" border="1" bordercolordark="#FFFFFF" bordercolorlight="black" cellpadding="2" cellspacing="0" width="550"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>System.Xml.XmlDocument doc = obj.GetXmlDocument(    &amp;quot;select ID, firstname, lastname, hiringdate &amp;quot; +    &amp;quot;from employee&amp;quot;);obj.Close();// or call Release instead of Close:// obj.Release();if(doc==null){    String strError = obj.GetLastError();    // more error handling code}else{    doc.Save(&amp;quot;c:\temp\employee.xml&amp;quot;);}</ccid_code></pre></td></tr></table></ccid_nobr><p >Close()方法会关闭数据库连接,释放所有内部资源。如果你稍后还要用到XMLDBComponent对象就无需调用这个方法。即使你调用了Close(),在下一次使用对象的时候,它就知道如何自动的连接数据库。事实上,每次由于数据库出现错误而刷新数据库连接时,内部都会调用Close()方法。稍后我们会谈到Release()方法。<p >下面是展现上面代码返回数据的xml文件。<p ><ccid_nobr><table align="center" border="1" bordercolordark="#FFFFFF" bordercolorlight="black" cellpadding="2" cellspacing="0" width="550"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>&amp;lt;XMLData&amp;gt;    &amp;lt;Record&amp;gt;        &amp;lt;ID&amp;gt;334&amp;lt;/ID&amp;gt;                    &amp;lt;firstname&amp;gt;Albert&amp;lt;/firstname&amp;gt;        &amp;lt;lastname&amp;gt;Einstein&amp;lt;/lastname&amp;gt;        &amp;lt;hiringdate&amp;gt;3/12/1999&amp;lt;/hiringdate&amp;gt;    &amp;lt;/Record&amp;gt;    &amp;lt;Record&amp;gt;                   &amp;lt;ID&amp;gt;404&amp;lt;/ID&amp;gt;        &amp;lt;firstname&amp;gt;Clint&amp;lt;/firstname&amp;gt;        &amp;lt;lastname&amp;gt;Eastwood&amp;lt;/lastname&amp;gt;        &amp;lt;hiringdate&amp;gt;12/21/2000&amp;lt;/hiringdate&amp;gt;    &amp;lt;/Record&amp;gt;    &amp;lt;Record&amp;gt;        &amp;lt;ID&amp;gt;536&amp;lt;/ID&amp;gt;        &amp;lt;firstname&amp;gt;James&amp;lt;/firstname&amp;gt;        &amp;lt;lastname&amp;gt;Bond&amp;lt;/lastname&amp;gt;        &amp;lt;hiringdate&amp;gt;10/23/2002&amp;lt;/hiringdate&amp;gt;    &amp;lt;/Record&amp;gt;    &amp;lt;RecordCount&amp;gt;3&amp;lt;/RecordCount&amp;gt;    &amp;lt;FieldCount&amp;gt;4&amp;lt;/FieldCount&amp;gt;&amp;lt;/XMLData&amp;gt;</ccid_code></pre></td></tr></table></ccid_nobr><p >GetXmlDocument()方法从数据库中取得数据,并且创建输出文档对象。它出错时返回null。在输出的xml文档中,每一个记录都被<ccid_code>&amp;lt;Record&amp;gt;</ccid_code>元素所包含,记录的每一字段都是子元素。如果一个字段值是null,那么相应的子元素不会出现在输出文档中。sql查询中使用的字段名会作为字段元素的名字使用。如果其字段没有指明(比如select * from..),数据库中相应的字段名会被用为元素名。sql查询时,计数字段必须给出名字,比如select count(*) as total from employee。在xml文档的末尾,有两个元素<ccid_code>&amp;lt;RecordCount&amp;gt; 和 &amp;lt;FieldCount&amp;gt; 显示了输出纪录集的大小。</ccid_code><p >GetXmlString()和GetXmlDocument() 除了输出的是字符串而不是文档对象外基本一样。这种方法在出错时其返回空字符串。而且,不会有由XMLDBComponent的问题引起的异常。你可以通过返回值来查错,GetLastError()返回最近错误的描述性信息。                                 <p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-10 15:15 , Processed in 0.078130 second(s), 22 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表