分享一个以前写的基于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.首先建立一个数 ...
随机推荐
- 前端-CSS-9-文本和字体-背景颜色
字体属性 div{ width: 300px; height: 100px; /*background-color: red;*/ border: 1px solid red; /*设置字体大小 px ...
- UI5-文档-4.7-JSON Model
现在我们已经设置了视图和控制器,现在是时候考虑MVC中的M了. 我们将在app中添加一个输入字段,将它的值绑定到模型上,并将相同的值绑定到输入字段的描述上.描述将根据用户类型直接更新. Preview ...
- visual stdio 工程 宏
$(SolutionDir) solution目录 $(ProjectDir) Project目录 $(TargetDir) 目标文件夹,如编译出的exe文件所在的目录 $(Configuratio ...
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...
- Session的常用场景
session :存储浏览器sessionID值保存在客户端,sessionID的key:data 数据存储在服务器上 会话管理,用户登录验证,权限访问控制,购物车,临时数据.
- python数据分析笔记——数据加载与整理]
[ python数据分析笔记——数据加载与整理] https://mp.weixin.qq.com/s?__biz=MjM5MDM3Nzg0NA==&mid=2651588899&id ...
- python中的__name__=='__main__'如何简单理解(一)
1. 摘要: 通俗的理解_name_ == '_main_':假如你叫小明.py,在朋友眼中,你是小明(_name_ == '小明'):在你自己眼中,你是你自己(_name_ == '_main_') ...
- Python3 ssl模块不可用的问题
编译安装完Python3之后,使用pip来安装python库,发现了如下报错: $ pip install numpy pip is configured with locations that re ...
- php拓展安装
Yaf安装配置:http://www.laruence.com/manual/yaf.install.html#yaf.installation.linux 下载Yaf的最新版本, 解压缩以后, 进入 ...
- android示例:一个简单的登陆程序
最近写了个简单的登陆程序,有几点收获: 1.懂得如何在LinearLayout中嵌套LinearLayout,完善布局的行列: 2.用android:layout_weight控制控件的比重: 3.用 ...