随着平民网络时 代的到来微型数据库必然发挥它独到的作用Access就是一个不错的选择!
今个我也用了下Access数据库麻雀虽小名堂多啊!
查询永远是神一样的问题不停的探索无止境的接近极限很明显如何用最少的代码写出最好的查询?
对问题是:
如何用最少的代码写出最好的查询?
我的最好的定义是:代码最美效率最合适(能快就快不能快够用就行)开发速度最快
这里以用户登录为例子先生成相应的实体类(UserLoginInfocs):
UserLoginInfocs
下面我们一起来玩数据查询的升级游戏
具体问题查询出userPass为这种下三滥的密码的用户
最原始查询
GetList(string userPass)
//中间掉了一句话
foreach(OleDbParameter para in paras){
cmdParametersAdd(para);
}
总结在这个阶段最恶心的就是
一大堆ConnectionCommand的操作
读取reader赋值给list的UserLoginInfo的过程每个字段索引的对起来心烦!
对ConnectionCommand的封装
就是SqlHelper那样的自己随便搞了个
ACECommonHelper
大概的思想就是这样调用代码我想大家也能想象的到代码参考下一个步骤可重用性大了
改进reader填充到list自动读取
根据反射读取数据库中的字段自动给UserLoginInfo相应的字段赋值
说明由于是代码生成数据库的字段基本上和生成类的属性一致
从网上下了个类
ACEReaderToModecs
改进后的查询方法:
GetList(string userPass)
public List<UserLoginInfo> GetList(string userPass)
{
List<UserLoginInfo> list = null;
List<OleDbParameter> paras = new List<OleDbParameter>();
OleDbParameter para = new OleDbParameter(@userPass OleDbTypeLongVarWChar);
paraValue = userPass;
parasAdd(para);
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
OleDbDataReader reader = AccessHelperACECommonHelperExcuteReader(
select * from User_login where userPass=@userPass
conn
parasToArray());
list = AccessHelperACEReaderToModelReaderToList<UserLoginInfo>(reader);
readerClose();
connClose();
}
return list;
}
总结这时候的读取数据部分的代码已经相对之前干净很多了但是细想一下真要你写这样的代码你觉得哪
个地方你还是觉得是在不停的重复?对就是那个参数的位置
特别是参数一多到处都闻得到是复制的味道看着也不大清晰挡住了很多核心的代码
传参每次都写这样的重复的代码真的很容易厌倦的大家都是喜新厌旧的人再改进一下
改进Parameter的写法
我们能不能在一句话中就能把参数所有的性质添加进去呢?我看行!
ACEParameterHelpercs
调用的时候查询方法这样写了:
GetList(string userPass)
现在是不是清爽多了不管再如何写主要部分基本上都是不同的
总结我想这个函数设计数据的方面还是太多了存在很多connreader我们完全可以在此基础上封装一个通
用的方法只要变化的部分参数sql语句和conn连接
业务封装把底层都包起来对外返回数据列表即可
GetList(string strSql OleDbConnection conn OleDbParameter[] paras)
此时这就是一个不错的方法了给他他想要的得你你想得的
调用的时候简明简单
业务逻辑层均是类似调用
参数越多这个代码就看着越爽
至此一个返回数据列表的数据访问层的改进就暂告一段落
颇多限制需要不断的完善以及继续深入的改进
你现在不用再对每个不同查询或者类似的查询写一大堆差不多的代码了
而为了这个目标我们所做的事情是
不停的牺牲性能不停的提高效率!
唯一要问的是你的项目能用不?
如果满足你的要求为什么不用呢?
发现可能代码显示有问题完整的代码留下邮箱我邮箱发送
好久没有写博客了想念啊一定要发在首页各位不要砸我~!
ps发现修改后代码显示不了最后两段代码我补上
代码
/// <summary>
/// 根据sql语句和传入参数获取结果列表
/// </summary>
/// <typeparam name=T></typeparam>
/// <param name=strSql></param>
/// <param name=conn></param>
/// <param name=paras></param>
/// <returns></returns>
public static List<T> GetList<T>(string strSql OleDbConnection conn OleDbParameter[] paras)
{
List<T> list = null;
OleDbDataReader reader = ACECommonHelperExcuteReader(strSql conn paras);
list = ACEReaderToModelReaderToList<T>(reader);
readerClose();
readerDispose();
connClose();
return list;
}
代码
OleDbParameter[] paras = new ACEParameterHelper()AddParameter<string>(memoCode memoType)
GetParameters();
List<DataDictItemInfo> list = null;
list = ACEAdvanceHelperGetList<DataDictItemInfo>(select * from Fk_data_dict_item t where mo=@memoType and tparent_id= conn paras);
return list;