一:前言

  这个是以前写的操作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#语言操作数据库的小框架的更多相关文章

  1. 分享一个自己写的vue多语言插件smart-vue-i18n

    前言 目前有比较成熟的方案(vue-i18n)了解了下,并且实用了一下感觉对于我在使用的项目来说略显臃肿,功能比较多,所以压缩的会比较大,在移动端不太适合所以自己花一天时间撸了一个vue多语言插件,压 ...

  2. 分享一个自己写的基于TP的关系模型

    为了说明问题,假设现在有表test1,test1有从表test2:test1属于test3,test1和test4多对多,关联表test1_test4. 1.定义关系 class Test1Model ...

  3. 分享一个自己写的基于JQuery的一个Web背景切换的Demo

    这个效果主要有两个特点: 1. 背景切换的渐变 2. 背景大小自适应 3. 背景自适应保持比例同时, 相对居中 js源码: (function ($) { $.fn.bgChange = functi ...

  4. 分享一个自己写的基于canvas的原生js图片爆炸插件

    DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...

  5. 分享一个自己写的基于TP的关系模型(四)

    修复分页BUG,原有代码查询到最后一页就一只查询最后一页 $ ? $; $this->maxPage = ceil($this->total/$this->rows); //$thi ...

  6. 分享一个自己写的基于TP的关系模型(三)

    这段时间对模型做了升级和优化,并将版本更新到TP3.2. 下载 下载后请将目录放置TP的Library目录下 1.数据节点优化,原来的节点为模型的名称或者表名,现在更新为定义关系的方法名 public ...

  7. 分享一个自己写的基于TP的关系模型(2)

    1.增加多对多关系的处理 /** * 定义关系 * @return array */ public function test4(){ //参数说明 //关联的模型 //主表关联字段 //关联中间表 ...

  8. 分享一个c#写的开源分布式消息队列equeue

    分享一个c#写的开源分布式消息队列equeue 前言 equeue消息队列中的专业术语 Topic Queue Producer Consumer Consumer Group Broker 集群消费 ...

  9. 分享一个自己写的MVC+EF “增删改查” 无刷新分页程序

    分享一个自己写的MVC+EF “增删改查” 无刷新分页程序 一.项目之前得添加几个组件artDialog.MVCPager.kindeditor-4.0.先上几个效果图.      1.首先建立一个数 ...

随机推荐

  1. box2d 计算下一帧的位置/角度

    var dt:Number=1/30; var y0:Number=_body.GetPosition().y; var y:Number=y0+_body.GetLinearVelocity().y ...

  2. java 可伸缩阻塞队列实现

    最近一年多写的最虐心的代码.必须好好复习java并发了.搞了一晚上终于测试都跑通过了,特此纪念,以资鼓励! import java.util.ArrayList; import java.util.L ...

  3. pyplot绘图区域

    pyplot绘图区域 Matplotlib图像组成 matplotlib中,整个图像为一个Figure对象,与用户交互的整个窗口 Figure对象中包含一个或多个Axes(ax)子对象,每个ax子对象 ...

  4. LeanCloud

    [Nodejs 访问 LeanCloud] 代码中使用 SDK: var AV = require('avoscloud-sdk') AV.initialize('AppID', ''AppKey) ...

  5. 快速上手Vue

    课程目录: ES6常用语法 Vue基础以及指令 Vue组件 Vue-Router Vue生命周期 npm webpack vue-cli Vuex以及axios

  6. 55. Jump Game (Array; Greedy)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. Hammer.js——给bootstrap添加触屏功能

    Hammer.js qq群号(html5技术交流):158677025   手机端演示二维码(或直接在手机中输入网址:http://lilinfeng.cncoder.me 浏览效果): 一.前言 移 ...

  8. 如何给a标签绑定ajax事件

    <a href="review?action=delete&id=${review.id}&articleId=${review.articleId}"cla ...

  9. runloop - CFRunLoopObserverRef

    1.

  10. vc通过webbrowser操作ie元素

    1>需要引用 webbrowser2.h,mshtml.h //m_web绑定的webbrowser的变量 CComQIPtr<IHTMLDocument2,&IID_IHTMLD ...