# Database扩展 **Repository Path**: zijian666/database-extensions ## Basic Information - **Project Name**: Database扩展 - **Description**: 以最优雅,最便捷的方式操作数据库 - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-09-23 - **Last Updated**: 2025-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zijian666.DatabaseClientExtensions 数据库拓展方法 ### 介绍 很简单的demo,几乎所有方法都是从`IDbConnection`与`IDbCommand`等**标准**类型扩展而来。 以最优雅,最便捷的方式操作数据库。 利用.NET扩展方法的语法糖,扩展.NET原生对象; 最大程度的避免对原有代码的污染,也方便与其他第三方组件库联动。 ### 更新日志 [点击查看](UPLOGS.md) ### 安装教程 [nuget - zijian666.DatabaseClientExtensions](https://www.nuget.org/packages/zijian666.DatabaseClientExtensions/) ### 使用说明 > 利用`FormattableString`类型的字符串格式化特性,优化的传入参数 > 除了返回值自动转换泛型实体类之外,还可以返回动态类型(`dynamic`),操作更便捷 ```csharp using (var conn = new MySqlConnection("Server=*;Port=*;Database=*;Uid=*;Pwd=*;")) { var list = conn.ExecuteList($"select * from students"); var first = conn.ExecuteFirst($"select * from students where id > {13} order by id"); Console.WriteLine($"Name:{first.Name}"); } ``` #### 支持数组参数 > 所有格式化字符串SQL都会被转为参数化执行,例如: `$"select * from x where id = {11}"` --> `select * from x where id = @p1;` 而数组转换会被转换为: `$"select * from x where id in ({new [] {1,2,3,4}})"` --> `select * from x where id in (@p1,@p2,@p3,@p4)` #### 最大返回行数 > 默认执行任何查询最多返回10万行, 除非手动指定行数 ``` csharp /// /// 查询列表时的默认的最大返回行数 /// public const int DEFAULT_LIMIT = 100000; /// /// 执行sql, 返回实体类集合 /// /// 最大返回行数 /// public static List ExecuteList(this IDbConnection conn, FormattableString sql, int limit = DEFAULT_LIMIT) ``` #### 自动取消执行 > 当执行操作结束, 但`DataReader`中仍有数据为读出时, 自动调用`DBCommand.Cancel()`取消执行 ```csharp public void Dispose() { if (_reader.Read() || _reader.NextResult()) { // 如果datareader未读完直接dispose,将会自动读取剩下的数据后才释放 _command?.Cancel(); } _reader?.Close(); _reader?.Dispose(); _reader = null; } ``` #### 非参数化变量 ```csharp using (var conn = new MySqlConnection("Server=*;Port=*;Database=*;Uid=*;Pwd=*;")) { var list = conn.ExecuteList($"select * from {table:!} limit 1"); } ``` ### 新特性规划(未实现) #### 动态where ```csharp using (var conn = new MySqlConnection("Server=*;Port=*;Database=*;Uid=*;Pwd=*;")) { var where = conn.CreateWhere(); if (name != null) { where += $"Name = {name}"; } if (age != 0) { where += $"Age > {age}" } var list = conn.ExecuteList($"select * from students {where}"); } ```