工具类EsFrameWork.DataBus是数据操作类,可以进行任何库,任何数据表,视图,存储过程的访问与修改。
这个类有两个功能
第一,不同数据库应用不同的DbConnection及DataReader,DataAdapter 返回接口
第二,不同数据接口可以进行EsDataConstructer(xmlfile) 返回List<POClass>的泛型集合实体类,然后你就可以用他来做绑定,数据源等操作啦
不废话了,先把代码弄上来
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
// 可以减少多打字数噢
// 实例化数据中心 by 数据库类型
EsDataCenter edc = new EsDataCenter(EsDataBaseType.OracleClient);
// 实例化连接
IDbConnection idc = edc.EsDataBaseInit( " user id=test;password=test;data source=test " );
// 测试连接
if (edc.EsDataBaseTest(idc))
Console.WriteLine( " connect " );
else
Console.WriteLine( " connect field " );
// 执行sql语句
IDataReader idr = edc.EsDataRun_ReturnReader( " select * from eai_data " );
// 构造数据结构
EsDataConstructer edcr = new EsDataConstructer( " c:\\ " , " XMLFile1.xml " );
// 转换数据至数据结构实例
List < object > tps = edcr.Constructer( " EAI_DATA " , idr, typeof (testPo));
// Console.WriteLine((tps[0] as testPo).CDATAID);
List < EsDataParameter > parametersList = new List < EsDataParameter > ();
EsDataParameter ldp1 = new EsDataParameter();
ldp1.ParameterName = " v_result " ;
ldp1.ParameterType = DbType.String;
ldp1.ParameterLength = 255 ;
ldp1.ParameterInOutType = ParameterDirection.Output;
parametersList.Add(ldp1);
// 返回存储过程Command
IDbCommand pidcmd = edc.EsDataRunProcedure_ReturnCommand( " zqsmsspackage.getrjmessage " , parametersList);
// 返回存储过程DataReader
IDataReader pidr = edc.EsDataRunProcedure_ReturnReader( " zqsmsspackage.getrjmessage " , new List < EsDataParameter > ()
{
// 也可以这样加载Parameter
new EsDataParameter(){ParameterName = " v_result " ,ParameterLength = 255 ,ParameterInOutType = ParameterDirection.Output,ParameterType = DbType.String}
});
// Console.WriteLine((pidcmd.Parameters[0] as System.Data.Common.DbParameter).Value);
类需要加载EsDataCenter类,实例化时需要一个enum类型,为的是多种数据库的支持
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/// 数据库类型枚举
/// </summary>
public enum EsDataBaseType
{
SqlServerClient,
OracleClient,
AccessClient,
MySqlClient,
SyBaseClient,
OtherClient
}
然后就连数据库了,我们来试试,首先实例化一个连接IDbConnection,我们需要用DataCenter数据中心的一个方法去初始化连接EsDataBaseInit
这了我们还提供个测试数据库连接的方法 数据中心可主动测试某个Connection是否连接,EsDataBaseTest方法,容错机制很不错,自动提升数据库性能的
这里开始执行语句啦,返回一个DataReader你就可以进行操作了,你总不能循环取数据吧,那样太麻烦了,当然了,你要是想得到这个idr的command也简单
也可以得到idr的Adapter哈
下面就开始说另一个东东咯,就是上文中提到麻烦的循环读取,c#有泛型后,一切都变的简单咯,虽说泛型不是微软原创,但是比原创做的都好,所以说,微软。。。哎,你知道的
这里要说的就是自动填充泛型数据咯,原理就是反射,反射+反射以及反射,可见原理有太多,大家不要迷糊噢
我们先来做个PO对象,就是持久化对象啦
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
{
public string CDATAID { get ; set ; }
public DateTime CSTIME { get ; set ; }
public DateTime CEXIPREDTIME { get ; set ; }
public string CSTATE { get ; set ; }
}
这里的字段都是表里的噢,数据Constructer的时候,会不会出现类型转换错误呢,你也想到这里了,对的,一定会,那么我们该怎么做呢,那就要看你xml是怎么写的
数据Constructer的时候需要你给定一个XML文件
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
< Constructer dbtype ="OracleClient" >
< Table name ="EAI_DATA" primary ="CDATAID" >
< Column name ="CDATAID" type ="VARCHAR" />
< Column name ="CSTIME" type ="DATE" />
< Column name ="CEXIPREDTIME" type ="DATE" />
< Column name ="CSTATE" type ="VARCHAR" />
</ Table >
<Column name="SUMERID" type="VARCHAR"/>
<Column name="SUMERTIME" type="VARCHAR" />
<Column name="SUMERREDTIME" type="VARCHAR" />
<Column name="SUMERTATE" type="VARCHAR" />
</Table>
</ Constructer >
标记不可以变哦,根节点一定要Constructer,Dbtype同Enum类型,因为这个Attribute会决定数据类型对应C#里的类型,Table是表节点,可以放多张表在Constructer里,Column是列,其他自己看吧,不多废话啦
下面就是使用了,前提是需要对象实体类PO,和表结构XML配置
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
// 转换数据至数据结构实例
List < object > tps = edcr.Constructer( " EAI_DATA " , idr, typeof (testPo));
构造EsDataConstructer有几个重载,有说明的,自己看下,另外所有代码都有注释的
第2句呢,就是返回泛型集合了List<Object> 类型
edcr.Constructer("EAI_DATA", idr, typeof(testPo));
这个方法也有很多重载,我只说一个,就是这个,第一个参数,是你XML里的节点表Table name=“EAI_DATA”,第2个参数则是你要使用的DataReader,第3个参数则要把你实体类的类型传进去
你可以用new testPo().GetType(),也可以用typeof(testPo),就会得到他的类型啦
构造后的结果你可以直接拿去绑定数据源
GridView1.DataSource=tps;
GridView1.DataBind();
每一列名绑定,则是你实体类的变量名CDATAID,CEXIPREDTIME,CSTIME,CSTATE类似这些
还有很多讲不详细,要不得写太多东西了
另外此FrameWork里还带
EsIOBus 操纵IO,File,Stream,Bytes,等输入输出数据
EsXMLBus 逻辑化XML文件放入实体对象,绝对好用
EsNetBus 点对点传输,TCP/UDP 及断点续传,功能灰常强大(还有一点就要写完了)
刚搞了张类视图
好了就写这么多吧,上传附件escorelib.dll,1.0版哈