上文回顾
上一篇文章基于AgileEAS.NET平台基础类库进行应用开发-使用UDA操纵SQL语句一文中演示如何使用UDA进行常规的业务进行操作,我们看到两种数据操纵流程,一种是原始的操作流程,另一种是简化的数据操作流程,应用开发人员不用关心数据库的打开与关闭,这些工作由UDA为我们完成,我们只需要实现与业务相关代码即可。问题引出 我们现在再看一眼我们在前面提供的数据处理流程:/// <summary>
/// 演示使用IDataReader。
/// </summary>
/// <remarks>
/// IDataReader返回类型必须要求数据库打开,也就是说手工管理连接的打开。
/// </remarks>
public void DemeGetDataReader()
{
IDataAccessor accessor = UdaContext.DataAccessor;
accessor.DataConnection.Open();
try
{
IDataReader reader = null;
try
{
reader = accessor.QueryDataReader("Select top 30 * from dbo.product");
//reader = (IDataReader)accessor.Query("Select top 30 from dbo.product",
ResultType.DataReader); //等效 while (reader.Read()) { int count = reader.FieldCount; for (int i = 0; i < count; i++) { System.Console.Write(string.Format("{0}={1}\t", reader.GetName(i),
reader.IsDBNull(i) ? "null" : reader.GetValue(i))); } System.Console.Write("\n"); } } finally { if (reader != null && !reader.IsClosed) reader.Close(); } } finally { accessor.DataConnection.Close(); } }
下面我们来使用DelegateQuery改造这个方法:
/// <summary> /// 演示代理查询。 /// </summary> public void DemeDelegateQuery() { IDataAccessor accessor = UdaContext.DataAccessor; accessor.DelegateQuery(new DataReaderHandler(this.InternalGetDataReader),
"Select top 30 * from dbo.product"); } /// <summary> /// 代理方法。 /// </summary> /// <param name="reader"></param> void InternalGetDataReader(IDataReader reader) { while (reader.Read()) { int count = reader.FieldCount; for (int i = 0; i < count; i++) { System.Console.Write(string.Format("{0}={1}\t", reader.GetName(i),
reader.IsDBNull(i) ? "null" : reader.GetValue(i))); } System.Console.Write("\n"); } }是不是这种方法感觉很简洁。
有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:UDA.Demo2.rar。 链接AgileEAS.NET平台开发指南-系列目录AgileEAS.NET应用开发平台介绍-文章索引一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录AgileEAS.NET平台应用开发教程-案例计划AgileEAS.NET官方网站敏捷软件工程实验室QQ群:116773358
本文出自 “魏琼东的博客” 博客,请务必保留此出处http://agilelab.blog.51cto.com/2173452/603010