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>