com.joybase.DB的源代码(1)
2024-07-21 02:22:35
供稿:网友
using system;
using system.collections;
using system.data;
using system.globalization;
using system.componentmodel;
using system.drawing.design;
using system.windows.forms.design;
namespace com.joybase.db
{
/// <summary>
/// <b>程序集名称:com.joybase.db.dll(开发版)</b><br/>
/// 版本号:1.4.0.0(for vs.net正式版);<br/>
/// 开发人员::开心就好<br/>
/// </summary>
/// <remarks>
/// <b>电子邮件:</b>[email protected]<br/>
/// <b>网站:</b>http://www.joycode.com(2001/12/1开通)<br/>
/// 功能列表
/// 本程序集由<font color="red"><b>开心就好</b></font>开发,如果您在使用中遇到任何疑问,可以<a href="[email protected]">致信反馈</a>,十分感谢,请在信件中给出使用的代码片段及出错的详细描述!<br/>
/// 数据库操作类,效果有:<br/>
/// 1.可以跨越任何ado.net支持的数据库;(已经支持,经过测试的数据有ms access以及ms sqlserver2000,以及oracle8i系列)<br/>
/// 2.可以执行存储过程及普通sql语句;(已经支持)<br/>
/// 3.可以得到存储过程返回的值及出口参数;(已经支持)<br/>
/// 4.简单的可以达到分页效果;(dataset已经支持,datareader已支持)<br/>
/// 5.可以以dataset、datareader、datatable以及无结果输出;<br/>
/// 6.事务批处理功能(暂不支持)<br/>
/// 7.日后将支持system.data.odbc驱动(暂不支持)<br/>
/// <div align="center"><b>更新列表(1.3.0.1)</b></div>
/// 1.增加了一个joybasedbexception异常类,用户可以自己捕捉异常<br/>
/// 2.joybasedbexception异常类的reason属性可以查阅当前异常的错误原因<br/>
/// 3.更新了部分示例<br/>
/// 4.本升级是由“蓝”请求而特意打造,在此表示一并感谢;<br/>
/// <div align="center"><b>更新列表(1.3.0.0)</b></div><br/>
/// 1.修改了原来的构造方法,加进了无参构造,去除了原来的单参构造方法;<br/>
/// 2.新增加两个属性,即connectionsetname,相当于原来的构造方法中的单一入参,即在config文件中配置连接字符串的键名,以及connectionstring,可以直接赋入数据库连接字符串,如果此键赋入,则将覆盖原来的connectionstringsetname;<br/>
/// 3.修改了原来的executedatatable的bug;<br/>
/// 4.修改了上一版本的两个分页方法,将out型参数提取为属性;<br/>
/// 5.内部的一些其它小型bug
/// <div align="center"><b>更新列表(1.2.0.3)</b></div><br/>
/// 1.去除了原来的execute方法,将其执行分解为多个方法;<br/>
/// 2.去除了returntype属性以及resulttype枚举类型。<br/>
/// 3.增加了executenoresult方法,返回值为纪录影响数;<br/>
/// 4.增加了executedatatable方法,返回一个system.data.datatable,该表的名称默认为“table”<br/>
/// 5.增加了executedatareader方法,返回一个system.data.idatareader对象<br/>
/// 6.重载executedatareader方法,支持分页显示,参数列表为<br/>
/// executedatareader(int pagesize,int currentpage,out int pagecount,out int pagesize)<br/>
/// pagesize:每页显示的纪录数;<br/>
/// currentpage;需要返回的页面号;<br/>
/// pagecount:回参,返回页面总数;<br/>
/// pagesize:回参,返回纪录总数;<br/>
/// 7.增加了executedataset方法,并且有四次重载,分别是<br/>
/// (1)executedataset()<br/>
/// 返回一个system.data.dataset<br/>
/// (2)executedataset(string tablename);<br/>
/// 入参为表的名称;<br/>
/// (3)executedataset(string tablename,int startrecord,int maxrecord);<br/>
/// 返回从第startrecord条纪录开始数的总共maxrecord条纪录。<br/>
/// (4)executedataset(string tablename,int pagesize,int currentpage,out int pagecount,out int recordcount)<br/>
/// 请参阅关于datareader分页方法的叙述。<br/>
///
/// </remarks>
/// <example>
///
/// 注意:在运行示例之前,您必须满足以下条件:<ol><li>请先在您的配置文件(如果是asp.net程序为web.config,如果是win form程序,则为app.config文件,加上以下一句话:
/// <appsettings><br/>
/// <add key="dsn" value="server=(local)/netsdk;database=northwind;trusted_connection=yes" /><br/>
/// </appsettings/><br/>
/// 请注意,这句话必须加在配置文件的根节点,即<configuration>之下</li>
/// <li>您已经安装了微软的msde数据库,如果您没有安装,可以在您的vs.net安装目录下查找到,如我安装在e盘,则msde的安装程序为e:/program files/microsoft visual studio .net/frameworksdk/samples/setup/msde/instmsde.exe,另外,请保证您的msde已经启动,可以在命令行使用net start mssql$netsdk 将其进行启动</li>
/// <li>以下示例仅是给出了ms sql server的桌面数据库的示例,在您有条件的情况下,您可以使用其它数据库来做试验,如果有任何问题,可以与我联系</li>
/// </ol>
/// <b>例一:执行查询操作,以datareader返回结果集</b><br/>
/// <code>
/// //请注意,此处的"dsn"为您在配置文件中所给的键名,而不是值;<br/>
/// try<br/>
/// {<br/>
/// command command=new command();<br/>
/// command.connectionstring="server=(local)/netsdk;database=northwind;trusted_connection=yes";<br/>
/// command.commandtext="select * from orders where [email protected]";<br/([email protected]";<br/)>
/// //下面的orders对应于sql语句中的字段名,同时,如果查询语句为存储过程,此处请插入相应的入参;<br/>
/// command.parameters["orderid"]=10249;<br/>
/// system.data.idatareader dr=command.executedatareader();<br/>
/// }<br/>
/// catch(joybasedbexception e)<br/>
/// {<br/>
/// //根据下面的示例你可以自己制作自己的异常捕捉;<br/>
/// console.writeline("错误信息为:"+e.message);<br/>
/// console.writeline("错误可能原因为:"+e.reason);<br/>
/// }<br/>
///
///if(dr.read())<br/>
///{<br/>
/// //读取数据,按照您原来对datareader的操作方法即可;<br/>
/// ...<br/>
/// }<br/>
/// else<br/>
/// {<br/>
/// //执行您的异常操作;<br/>
/// ...<br/>
/// <br/>
/// }<br/>
/// dr.close();<br/>
/// </code>
/// <b>例二:执行查询操作,并且返回dataset对象:</b><br/>
/// <code>
/// command command=new command();<br/>
/// command.connectionsetname="dsn";<br/>
/// command.commandtext="select * from orders";<br/>
/// //下面我们分别返回几个dataset对象<br/>
/// //第一种是带默认表名为dataset为“table”的dataset<br/>
/// system.data.dataset ds1=command.executedataset();<br/>
/// //然后再返回一个自定义表名为“tablename”的对象<br/>
/// system.data.dataset ds2=command.executedataset("tablename");<br/>
/// //再返回一个dataset,我们将限制结果集的返回,假设从第12个纪录开始,查询50个纪录出来<br/>
/// system.data.dataset ds3=command.executedataset("tablename",12,50);<br/>
/// //同时,你如果乐意,还可以只返回一个datatable<br/>
/// system.data.datatable table=command.execute.datatable();<br/>
/// //现在您可以执行数据绑定操作了,直接取它的defaultview即可<br/>
/// ...<br/>
/// </code>
/// <b>例三:执行分页查询,并且返回dataset对象以及datareader对象</b><br/>
/// <code>
/// command command=new command();<br/>
/// command.connectionsetname="dsn";<br/>
/// command.commandtext="select * from orders";<br/>
/// command.pagesize=30;<br/>
/// //此处您可以用变量替代,即可以达到动态分页的效果<br/>
/// int currentpage=1;<br/>
/// system.data.dataset ds=command.executedataset("orderstable",currentpage);<br/>
/// //执行绑定操作,这样datalist以及其它数据绑定控件均支持分页了(您还得做一些操作,如当前页面数不要大于页面总数也不要小于等于0等的判断)<br/>
/// ...<br/>
/// //下面输出datareader<br/>
/// system.data.idatareader dr=command.executedatareader(currentpage);<br/>
/// int i=0;<br/>
/// while(dr.read())<br/>
/// {<br/>
/// //执行您需要的操作<br/>
/// ....<br/>
///
/// }<br/>
/// string showtext="共有纪录"+command.recordset+"条,共有"+command.pagecount+"页,当前显示第"+currentpage+"页";<br/>
/// <br/>
/// </code>
/// </example>