[原创]EsFrameWork 工具类使用[一]
工具类EsFrameWork.DataBus是数据操作类,可以进行任何库,任何数据表,视图,存储过程的访问与修改。
这个类有两个功能
第一,不同数据库应用不同的DbConnection及DataReader,DataAdapter 返回接口
第二,不同数据接口可以进行EsDataConstructer(xmlfile) 返回List<POClass>的泛型集合实体类,然后你就可以用他来做绑定,数据源等操作啦
不废话了,先把代码弄上来
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.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://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/// 数据库类型枚举
/// </summary>
public enum EsDataBaseType
{
SqlServerClient,
OracleClient,
AccessClient,
MySqlClient,
SyBaseClient,
OtherClient
}
然后就连数据库了,我们来试试,首先实例化一个连接IDbConnection,我们需要用DataCenter数据中心的一个方法去初始化连接EsDataBaseInit
这了我们还提供个测试数据库连接的方法 数据中心可主动测试某个Connection是否连接,EsDataBaseTest方法,容错机制很不错,自动提升数据库性能的
这里开始执行语句啦,返回一个DataReader你就可以进行操作了,你总不能循环取数据吧,那样太麻烦了,当然了,你要是想得到这个idr的command也简单
也可以得到idr的Adapter哈
下面就开始说另一个东东咯,就是上文中提到麻烦的循环读取,c#有泛型后,一切都变的简单咯,虽说泛型不是微软原创,但是比原创做的都好,所以说,微软。。。哎,你知道的
这里要说的就是自动填充泛型数据咯,原理就是反射,反射+反射以及反射,可见原理有太多,大家不要迷糊噢
我们先来做个PO对象,就是持久化对象啦
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.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://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.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://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.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版哈