• 分享一个以前写的基于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

  • 相关阅读:
    枚举
    log4j 简单应用
    [luogu4728 HNOI2009] 双递增序列 (dp)
    [luogu3760 TJOI2017] 异或和(树状数组)
    [luogu1485 HNOI2009] 有趣的数列 (组合数学 卡特兰数)
    [luogu4054 JSOI2009] 计数问题(2D BIT)
    [luogu2594 ZJOI2009]染色游戏(博弈论)
    [luogu2591 ZJOI2009] 函数
    [luogu2148 SDOI2009] E&D (博弈论)
    [luogu2154 SDOI2009] 虔诚的墓主人(树状数组+组合数)
  • 原文地址:https://www.cnblogs.com/silentdoer/p/8440494.html
Copyright © 2020-2023  润新知