分享一个以前写的基于C#语言操作数据库的小框架
一:前言
这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter、ModelPart、Relationship等机制实现操作数据库时的SQL语句的拼接和返回数据的转换功能;
对数据源的参数配置在启动工程的App.config里配置,后面有github的源码地址。
二:用法
代码如下:
class Program
{
static void Main(string[] args)
{
var result = DalManager.GetAllRecordsOfTablePart(Student.GetDbTableName, new[] { Student.StuIdProperty, Student.NameProperty },
dt =>
{ // TODO converter,将DataTable转换为List<StudentPart>对象,这里可以改进。
var rst = new List<StudentPart>();
foreach (DataRow row in dt.Rows)
{
var tmp = new StudentPart();
tmp.StuId = Convert.ToInt64(row[Student.StuIdProperty]);
tmp.Name = row[Student.NameProperty].ToString();
rst.Add(tmp);
}
return rst;
});
Console.WriteLine(result.Count);
Console.WriteLine(result[].Name);
Console.WriteLine(result[result.Count - ].Name);
Console.ReadKey();
} private class StudentPart
{
public long StuId; public string Name;
}
}
上面的DalManager.GetAllRecordsOfTablePart的定义是:
public static List<TResult> GetAllRecordsOfTablePart<TResult>(Func<string> getDbTableName, string[] fields, Func<DataTable, List<TResult>> convert)
{
var selectPart = string.Join(",", fields);
var strCmd = $"select {selectPart} from {getDbTableName()};";
var dt = MySqlHelper.Query(strCmd);
return convert(dt);
}
第一个参数用来获取要查询的表名,第二个是要查询的字段有哪些,第三个是对查询结果集DataTable进行转换的回调函数。
来看看另一个API定义:
public static int UpdateRecordsByPairsFilters(Func<string> getDbTableName, List<FieldValuePair> pairsForSet, List<FilterInfo> filtersForWhere)
{
var setPart = SQLHelper.ParsePairsToSetPartExpressionString(pairsForSet);
var wherePart = SQLHelper.ParseFiltersToWherePartExpressionString(filtersForWhere);
// "update Student set Name = 'WLQ', ClsName = '高三三班' where StuId=2;"
var strCmd = $"update {getDbTableName()} set {setPart} where {wherePart};";
return MySqlHelper.ExecuteCmd(strCmd);
}
第一个参数同样是要操作的表名,第二个参数是要set的参数列表及对应值;第三个参数是条件,每个FilterInfo对象都是一个条件,如a=b或a like b之类的
,默认它的Relationship是AND,即每个filter是以and的形式拼接,也可以指定filterInfo.Relationship来换成OR;
filter里还有name和value及Express用来指定这个filter的字段名和条件值及这个filter的类型,如等于、like、between等等;
所有的API都在DalManager里,里面都写好了注释,如果有需要的可以自己去看看。
github地址:https://github.com/Silentdoer/CSharpDbTool.git
分享一个以前写的基于C#语言操作数据库的小框架的更多相关文章
- 分享一个自己写的vue多语言插件smart-vue-i18n
前言 目前有比较成熟的方案(vue-i18n)了解了下,并且实用了一下感觉对于我在使用的项目来说略显臃肿,功能比较多,所以压缩的会比较大,在移动端不太适合所以自己花一天时间撸了一个vue多语言插件,压 ...
- 分享一个自己写的基于TP的关系模型
为了说明问题,假设现在有表test1,test1有从表test2:test1属于test3,test1和test4多对多,关联表test1_test4. 1.定义关系 class Test1Model ...
- 分享一个自己写的基于JQuery的一个Web背景切换的Demo
这个效果主要有两个特点: 1. 背景切换的渐变 2. 背景大小自适应 3. 背景自适应保持比例同时, 相对居中 js源码: (function ($) { $.fn.bgChange = functi ...
- 分享一个自己写的基于canvas的原生js图片爆炸插件
DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...
- 分享一个自己写的基于TP的关系模型(四)
修复分页BUG,原有代码查询到最后一页就一只查询最后一页 $ ? $; $this->maxPage = ceil($this->total/$this->rows); //$thi ...
- 分享一个自己写的基于TP的关系模型(三)
这段时间对模型做了升级和优化,并将版本更新到TP3.2. 下载 下载后请将目录放置TP的Library目录下 1.数据节点优化,原来的节点为模型的名称或者表名,现在更新为定义关系的方法名 public ...
- 分享一个自己写的基于TP的关系模型(2)
1.增加多对多关系的处理 /** * 定义关系 * @return array */ public function test4(){ //参数说明 //关联的模型 //主表关联字段 //关联中间表 ...
- 分享一个c#写的开源分布式消息队列equeue
分享一个c#写的开源分布式消息队列equeue 前言 equeue消息队列中的专业术语 Topic Queue Producer Consumer Consumer Group Broker 集群消费 ...
- 分享一个自己写的MVC+EF “增删改查” 无刷新分页程序
分享一个自己写的MVC+EF “增删改查” 无刷新分页程序 一.项目之前得添加几个组件artDialog.MVCPager.kindeditor-4.0.先上几个效果图. 1.首先建立一个数 ...
随机推荐
- Hive 和 HBase区别
作者:yuan daisy 链接:https://www.zhihu.com/question/21677041/answer/78289309 来源:知乎 著作权归作者所有.商业转载请联系作者获得授 ...
- MVC 发布到IIS中的配置方法
MVC 发布到IIS中的配置方法 http://msdn.microsoft.com/zh-cn/library/gg703322(v=vs.98).aspx
- hibernate最佳实践
1.数据量巨大,性能要求高,hibernate由于在ORM映射中对系统资源消耗也比较高,所以不适合 2.hibernate适合:逻辑复杂,数据量不大. 3.sessionFactory的创建非常消耗资 ...
- Error: Cannot find a valid baseurl for repo: epel
修改一下/etc/yum.repos.d/epel.repo文件, enable=1改为enable=0
- LuoguP1126 机器人搬重物(BFS)
题目链接:https://www.luogu.org/problemnew/show/P1126 思路:很不错的搜索题,用BFS,虐了我1天多才A掉 QAQ,细节很多. 1.每个状态包含行.列.方向. ...
- scanf与printf
scanf格式控制的完整格式: % * m l或h 格式字符 ①格式字符与printf函数中的使用方式相同,以%d.%o.%x.%c.%s.%f.%e,无%u格式.%g ...
- tf.FIFOQueue()
Tensorflow–tf.FIFOQueue详解描述tf.FIFOQueue根据先进先出(FIFO)的原则创建一个队列.队列是Tensorflow的一种数据结构,每个队列的元素都是包含一个或多个张量 ...
- day6:vcp考试
Q101. Refer to the Exhibit.Which tab shows the Hardware Acceleration support status?A. DevicesB. Pro ...
- Oracle 进入数据库 新增用户 修改密码方法
1.以管理员身份进入 SQL plus 2.输入:sys/manager as sysdba 3.新增用户: 创建新用户: create user 用户名 identified by 密码; 解锁用户 ...
- 【深度好文】多线程之WaitHandle-->派生-》Mutex信号量构造
bool flag = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", ...