分享一个以前写的基于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[0].Name);
            Console.WriteLine(result[result.Count - 1].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