NSS_05 数据访问选型
在数据访问层上很想用orm框架, 选用Nhibernate或ef, 可以直接操作类对象, 避免转换, 更加的面向对象,更重要的是开发起来就方便多了。 但是从网上了解到这些框架太高级了, 用得不好到时会有性能问题, 针对这个方面, 还是等以后熟悉了再用吧。 剩下linq也不熟,时间不允许了, 所以选用Entlib5.0, 总比ado.net要方便一些的吧。
其实使我坚定下来使用entlib主要是看到一个功能: "Retrieving data as a sequence of objects."的ExecuteSprocAccessor和ExecuteSqlStringAccessor这样直接返回对象类型的查询结果, 岂不是很棒, 大概看了一下使用方法,也不是很复杂。最后发现不认真害死人啊。
在实际使用中才发现这俩方法, 每个方法都需要内建一个类来实现IParameterMapper和IRowMapper来传递参数和结果集与对象字段的映射。 超级麻烦(也许我还不知道更简便的用法), 这样用会使人疯掉。想来想去, 反正结果集到类对象都需要一个转换过程,还不如自己写转换好了。
然后问题又来了, 是返回DataTable然后解析呢, 还是直接返回DataReader, 查了一下谷歌。看到下面参考的第二个网站,作者分别通过executeDataSet, IDataReader, ExecuteSqlStringAccessor三种方式访问数据库并转化为对象, 结果为:
Mapped: 50000 Records in 1115894 Ticks via DataSet
Mapped: 50000 Records in 563554 Ticks via ExecuteSqlStringAccessor
Mapped: 50000 Records in 562318 Ticks via IDataReader/IDataRecord
看起来通过IDataReader的性能最高, 作者选用ExecuteSqlStringAccessor也是看中它能方便地转化为对象。但由于上面原因, 我只能选用IDataReader.在使用中发现几个问题。
- 检索到空值
一般返回结果可以用类似reader.getString(0)或reader[0]的形式来获取数据, 但是如果这一项为空的话, 就会报异常。得首先用reader.IsDbNull来判断是否为空, 网上查到reader.getValue()在空值是不会异常,返回空字符地中,不过没有测试。 我用的是另一种方法,如下面代码示例
using (DbCommand cmd = db.GetSqlStringCommand(this.getPaginationSql(sql.ToString())))
{
db.AddInParameter(cmd, "startRow", DbType.UInt32, start);
db.AddInParameter(cmd, "endRow", DbType.UInt32, start + limit);
List<User> user = new List<User>();
using (IDataReader reader = db.ExecuteReader(cmd))
{
while (reader.Read())
{
user.Add(new User {
User_id = reader["user_id"] as string,
User_name = reader["user_name"] as string,
User_pwd = reader["user_pwd"] as string,
Description = reader["description"] as string,
Phone = reader["phone"] as string,
Email = reader["email"] as string,
InvalidTime = reader["invalidtime"] as DateTime?,
CreateTime = reader["createtime"] as DateTime?,
Last_login_time = reader["last_login_time"] as DateTime?
});
}
}
}
在加入List时, 有时会将已经排序好的对象顺序打乱, 这就需要在前前store中配置排序, 对总的功能不影响.反正用extjs,前台就多做一点事了。
--------------------------------------------------------------------------------------------------------------------------------------------
在后面测试时发现,如果store中加入sorter, 则在grid分页后, 每次加载数据后, 行号插件都会重新从1开始计算, 又没找到原因,只能暂时取消前台这个排序啦, 有高手赐教一下子不?
「参考」
- http://msdn.microsoft.com/en-us/library/ff953187(v=pandp.50).aspx
- http://markcoleman.tumblr.com/post/2628469993/three-different-ways-to-access-data-via-enterprise
NSS_05 数据访问选型的更多相关文章
- #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie
郑昀 创建于2014/10/30 最后更新于2014/10/31 一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...
- 同时支持EF+Dapper的混合仓储,助你快速搭建数据访问层
背景 17年开始,公司开始向DotNet Core转型,面对ORM工具的选型,当时围绕Dapper和EF发生了激烈的讨论.项目团队更加关注快速交付,他们主张使用EF这种能快速开发的ORM工具:而在线业 ...
- ADO.NET编程之美----数据访问方式(面向连接与面向无连接)
最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...
- 高性能Javascript--高效的数据访问
接上一篇,希望能写一个高性能Javascript专题. 第一篇:高性能Javascript--脚本的无阻塞加载策略. 参考摘录<高性能Javascript>. 经典计算机科学的一个问题是, ...
- 解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro
LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. ...
- 架构从最简单的数据访问框架(ORM)到资源调度和治理中心(SOA)说起
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将 ...
- ADO.NET数据访问模板整理
/// <summary> /// 数据访问类:hi_test /// </summary> public partial class TestDA { public Test ...
- ADO.NET数据访问技术
ADO.NET数据访问技术 就是将C#和MSSQLl连接起来的纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中,也可以将数据库中的数据提取到内存中供程序调用.是所有数据访问技术的基础. A ...
- Oracle数据访问组件ODAC的安装方法
Oracle数据访问组件ODAC(Oracle Data Access Components)顾名思义就是用来访问Oracle数据库的小程序.我们可以编程调用这些组件来实现在没有安装Oracle数据库 ...
随机推荐
- shell shift 使用一例
这段代码的作用是: 当输入 ./Export.sh 是将当前目录进行打包,当输入./Export.sh XX1 XX2 XX3 .... XXn 时,如果XXn存在,则依次将存在的目录进行打包,打包文 ...
- <转>一道面试题比较synchronized和读写锁
一.科普定义(原文:http://903497571.iteye.com/blog/1874752) 这篇博文的两个主角“synchronized”和“读写锁” 1)synchronized 这个同步 ...
- J2EE常用包:
J2EE常用包: java web开发必掌握的javax.servlet : servlet包及支持javax.servlet.http : http请求支持javax.servlet.jsp : 及 ...
- ImageView的Scaletype
ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layout xml中定义android:s ...
- iOS 关于UIscrollView
设置 滚动起始位置 [scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
- java笔记 chapter1 java是什么,能干什么,有什么,特点,开发环境
一,java是什么 二,java能干什么 三,java有什么 四,java的特点 五,java的三大特性:虚拟机,垃圾回收和代码安全 六,构建JSE开发环境:下载安装jdk和配置环境变量 七,编写并运 ...
- 11. Android框架和工具之 Logger(调试代码)
1. Logger Logger是android是一个简单.漂亮.功能强大的Android日志程序. 日志程序提供了 : 线程信息Thread information 类信息Class informa ...
- 【Android 界面效果18】Android软件开发之常用系统控件界面整理
[java] view plaincopyprint? <span style="font-size:18px">1.文本框TextView TextView的作用 ...
- 使用手机模拟器与android操作系统
创建手机模拟器: 1. 点击Eclipse中新增的按钮,打开"Android Virtual Device Manager"(不同版本的ADT可能打开路径不同),如下图: 2. 点 ...
- Communications link failure的解决办法
使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误: Communications link failure,The last packet successfully r ...