[原创]EsFrameWork 工具类使用[一]

工具类EsFrameWork.DataBus是数据操作类,可以进行任何库,任何数据表,视图,存储过程的访问与修改。

这个类有两个功能

第一,不同数据库应用不同的DbConnection及DataReader,DataAdapter 返回接口

第二,不同数据接口可以进行EsDataConstructer(xmlfile) 返回List<POClass>的泛型集合实体类,然后你就可以用他来做绑定,数据源等操作啦

 

不废话了,先把代码弄上来

 

代码
using db = EsFrameWork.EsDataBus;
//可以减少多打字数噢


//实例化数据中心 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类型,为的是多种数据库的支持

代码
    /// <summary>
    
/// 数据库类型枚举
    
/// </summary>
    public enum EsDataBaseType
    {
        SqlServerClient,
        OracleClient,
        AccessClient,
        MySqlClient,
        SyBaseClient,
        OtherClient
    }

 

然后就连数据库了,我们来试试,首先实例化一个连接IDbConnection,我们需要用DataCenter数据中心的一个方法去初始化连接EsDataBaseInit

//方法原型,相应的DataBaseType会返回相应的DbConnection
public IDbConnection EsDataBaseInit(string _dbconstr)

 

这了我们还提供个测试数据库连接的方法 数据中心可主动测试某个Connection是否连接,EsDataBaseTest方法,容错机制很不错,自动提升数据库性能的

IDataReader idr = edc.EsDataRun_ReturnReader("select * from eai_data");

 

这里开始执行语句啦,返回一个DataReader你就可以进行操作了,你总不能循环取数据吧,那样太麻烦了,当然了,你要是想得到这个idr的command也简单

IDbCommand idccc = edc.EsDataRun_ReturnCommand("select * from eai_data");

 

也可以得到idr的Adapter哈

IDataAdapter idaaa = edc.EsDataRun_ReturnAdapter("select * from eai_data");

 

 

下面就开始说另一个东东咯,就是上文中提到麻烦的循环读取,c#有泛型后,一切都变的简单咯,虽说泛型不是微软原创,但是比原创做的都好,所以说,微软。。。哎,你知道的

这里要说的就是自动填充泛型数据咯,原理就是反射,反射+反射以及反射,可见原理有太多,大家不要迷糊噢

我们先来做个PO对象,就是持久化对象啦

代码
    public class testPo 
    {
        
public string CDATAID { getset; }
        
public DateTime CSTIME { getset; }
        
public DateTime CEXIPREDTIME { getset; }
        
public string CSTATE { getset; }

    }

 

这里的字段都是表里的噢,数据Constructer的时候,会不会出现类型转换错误呢,你也想到这里了,对的,一定会,那么我们该怎么做呢,那就要看你xml是怎么写的

数据Constructer的时候需要你给定一个XML文件

代码
<?xml version="1.0" encoding="utf-8" ?>
<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>
  <Table name="EAI_SUMER" primary="CDATAID">
    
<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配置

 

代码
                EsDataConstructer edcr = new EsDataConstructer("c:\\""XMLFile1.xml");
                
//转换数据至数据结构实例
                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版哈

 /Files/chinaeddy/escorelib.rar

posted @ 2010-06-10 13:29  chinaeddy  阅读(2030)  评论(6编辑  收藏  举报