项目作者: Cocon90

项目描述 :
Cocon90.Db
高级语言: C#
项目地址: git://github.com/Cocon90/Cocon90.Db.git
创建时间: 2017-02-21T03:14:20Z
项目社区:https://github.com/Cocon90/Cocon90.Db

开源协议:Apache License 2.0

下载


Cocon90.DB 使用说明

一、简介

Cocon90.Db是由Cocon90.Db.Common为核心的类库与其它数据库操作库组合而成,以方便调用为主要目的,支持ORM操作,增、删、改、查、事务、批量执行、创建表、插入或保存记录 等等,并提供多种数据库支持。当前已支持Mysql、Sqlite、SqlServer。

Cocon90.Db is a core class library which is composed of Cocon90.Db.Common and other database operations, which is convenient to call for the main purpose, and provides a variety of database support. Currently supports Mysql, Sqlite, SqlServer.

二、运行环境

  1. (1)Windows平台下,需要.NetFramework4.0+
  2. (2)LinuxMAC平台下,需要.NetStandard1.3+ 支持.Net Core 1.0+

三、使用方法

(1)新建一件空的项目,取名Cocon90.Db.Demo

(2)添加引用(此步可省略,因为下一步会自动执行这一步),或者执行Install-Package Cocon90.Db.Common或者.NetCore平台使用Install-Package Cocon90.DbCore.Common

(3)接下来,引入数据库操作库。

  1. 如果要操作SqlServer数据库则引入Cocon90.Db.SqlServer或者.NetCore平台使用Install-Package Cocon90.DbCore.SqlServer

  2. 如果要操作Sqlite数据库,则引入Cocon90.Db.Sqlite或者.NetCore平台使用Install-Package Cocon90.DbCore.Sqlite

  3. 如果要操作Mysql,则需要引入Install-Package Cocon90.Db.Mysql库或者.NetCore平台使用Install-Package Cocon90.DbCore.Mysql

(4)新建Program类,加入Main函数,比如我们要操作Sqlite数据库加入下列代码:

  1. static void Main(string[] args)
  2. {
  3. // 依次传入数据库类型,连接字符串来构建操作对像(此方法不会连接数据库,可以提前实例好)。
  4. var dh = Cocon90.Db.Common.Db.GetDataHelper("Sqlite", "Data Source=${app}\\mysqlite.db;");
  5. // 或者也可以直接通过读取app.config或者web.config或者.NetCore中的appsettings.json来读取连接字符串。
  6. var dh = Cocon90.Db.Common.Db.GetDataHelper();
  7. //通过实体(下方有实体的例子),执行创建数据表
  8. var effRow = dh.CreateOrUpdateTable<Model.CountryLanguageModel>();
  9. //...
  10. var tab = dh.GetTable("select * from Student");
  11. var eff = dh.ExecNoQuery("...");
  12. var str = dh.GetString("...");
  13. var isok = dh.GetBoolean("...");
  14. var age = dh.GetInt("...");
  15. var mylst = dh.GetListString("...");
  16. var pr = dh.GetPagedResult("...");
  17. }

在NetFramework中,如果在要读取配置文件中的app.config中的连接语句,则需要在App.config中进行如下配置:

  1. <configuration>
  2. <connectionStrings>
  3. <!--<add name="dbConnString" providerName="Mysql" connectionString="Server=127.0.0.1;Port=3306;Database=world;Uid=root;Pwd=123456;"></add>-->
  4. <!--<add name="dbConnString" providerName="SqlServer" connectionString="Server=127.0.0.1;Database=world;Uid=sa;Pwd=123456;"></add>-->
  5. <add name="dbConnString" providerName="Sqlite" connectionString="Data Source=${app}\SQLiteSpy.db3;"></add>
  6. </connectionStrings>
  7. </configuration>

在NetCore或者其它NetStandard中如果在要读取配置文件中的appsettings.json中的连接语句,则需要在appsettings.json中进行如下配置:

  1. {
  2. "dbType": "SqlServer",
  3. "dbConnString": "Server=.;Database=world;Uid=sa;Pwd=123456;"
  4. }

下面是常用的一些测试:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //构建数据库操作类
  6. //var dh = Cocon90.Db.Common.Db.GetDataHelper("Cocon90.Db.Sqlite.dll", "Cocon90.Db.Sqlite.DbDriver", "D:\\Application\\DbTools\\sqliteSpy\\SQLiteSpy.db3;");
  7. var dh = Cocon90.Db.Common.Db.GetDataHelper();
  8. //生成建表的Sql
  9. var createSql = dh.GetCreateTableSql<Model.CountryLanguageModel>();
  10. //生成更新表结构的Sql,用于当实体发生变化时,加入对新加的列。
  11. var updateTabSql = dh.GetUpdateTableSql(typeof(Model.CountryLanguageModel));
  12. //执行建表的Sql,如果表结构已存在,且和实体相匹配,则自动跳过。
  13. var effRow = dh.CreateOrUpdateTable<Model.CountryLanguageModel>();
  14. //批量保存实体。
  15. var needInserts = new List<Model.CountryLanguageModel>();
  16. Random rand = new Random();
  17. for (int i = 0; i < 500; i++)
  18. {
  19. needInserts.Add(new Model.CountryLanguageModel() { Percent = (decimal)(rand.NextDouble() * 10), Date = DateTime.Now.AddDays(-1 * i), Guid = Guid.NewGuid(), IsOfficial = rand.Next(0, 2) > 0, Code = i, Language = "Lang_" + i });
  20. }
  21. //可以保存单个实体,也可以一个事务中保存多个实体,要求有主键,有则保存,无则更新,可以选择只更新非Null值。
  22. var succRows = dh.Save(needInserts.ToArray());
  23. //可以插入单个实体,也可以一个事务中插入多个实体。
  24. //var succRows = dh.Insert(needInserts.ToArray());
  25. //常规查询表(返回类似于DataTable结构的轻量集类MDataTable)
  26. var tab = dh.GetTable("SELECT * FROM countrylanguage");
  27. //返回List实体集合
  28. var lst = dh.GetList<Model.CountryLanguageModel>("SELECT * FROM countrylanguage");
  29. Console.WriteLine(lst.Count);
  30. //返回1个实体
  31. var oneModel = dh.GetOne<Model.CountryLanguageModel>("select * from countrylanguage");
  32. //通过主键返回1个实体,如果是多主键,则依次传入多个主键(多主建时,按主键列名排序依次传入)。
  33. var oneModel2 = dh.GetOneByPrimaryKey<Model.CountryLanguageModel>(1, "Lang_1");
  34. //一个事务中插入记录
  35. //var successRows = dh.Insert(new Model.CountryLanguage() { Percent = 1.555m, IsOfficial = false, Code = 2, Language = "Lang" },
  36. // new Model.CountryLanguage() { Percent = 1.66m, IsOfficial = true, Code = 3, Language = "Lang" });
  37. //获取通过主键更新记录的Sql语句,要更新的字段设置值,其它为NULL即可。
  38. var updateSql = dh.GetUpdateSqlByPrimaryKey(new Model.CountryLanguageModel() { Percent = 9.9m }, true, "1=1 AND 2=2", 3, "Lang");
  39. //获取通过实体中的主键更新记录的Sql语句,要更新的字段设置值,其它为NULL即可。
  40. var updateSql2 = dh.GetUpdateSql(new Model.CountryLanguageModel { Code = 3, Percent = 3.3m }, false, null);
  41. //获取通过自定义Where中的主键更新记录的Sql语句,要更新的字段设置值,其它为NULL即可。
  42. var updateSql3 = dh.GetUpdateSqlByWhere(new Model.CountryLanguageModel { Code = 3, Percent = 3.3m }, true, "Language='Lang'", new Common.Data.Params("@Name", "song"));
  43. //通过自定义where更新实体,要更新的字段设置值,其它为NULL即可。
  44. var updateRow3 = dh.UpdateByByWhere(new Model.CountryLanguageModel { Percent = 3.3m }, true, "Language='Lang'");
  45. //通过传入的主键列表(多主建时,按主键列名排序依次传入)更新实体,要更新的字段设置值,其它为NULL即可。
  46. var updateRow = dh.UpdateByPrimaryKey(new Model.CountryLanguageModel { Percent = 4.5m }, true, null, 3, "Lang");
  47. var deleteSql = dh.GetDeleteSqlByPrimaryKey<Model.CountryLanguageModel>("1=1", 3, "Lang");
  48. var deleteSql1 = dh.GetDeleteSqlByPrimaryKey<Model.CountryLanguageModel>(null, 3, "Lang_111");
  49. var deleteSql2 = dh.GetDeleteSqlByWhere<Model.CountryLanguageModel>("Percentage=@Perc", new Common.Data.Params("Perc", 100));
  50. var deleteSql3 = dh.GetDeleteSql(new Model.CountryLanguageModel { Code = 3, Percent = 3.3m }, "1=@myParam", new Common.Data.Params("myParam", 1));
  51. var deleteSql4 = dh.GetDeleteSql<Model.CountryLanguageModel>(null, "1=@myParam", new Common.Data.Params("myParam", 1));
  52. var successRow = dh.Delete(new Model.CountryLanguageModel { Code = 3, Percent = 4.5m });
  53. //返回保存Sql,无则添加,有则更新。
  54. var saveSql = dh.GetSaveSql(new Model.CountryLanguageModel() { Percent = 1.555m, IsOfficial = false, Code = 2, Language = "Lang" },
  55. new Model.CountryLanguageModel() { Percent = 1.66m, IsOfficial = true, Code = 3, Language = "Lang" });
  56. var saveRows = dh.Save(new Model.CountryLanguageModel() { Percent = 1.555m, IsOfficial = false, Code = 2, Language = "Lang" },
  57. new Model.CountryLanguageModel() { Percent = 1.66m, IsOfficial = true, Code = 3, Language = "Lang" });
  58. var executeNoQuery = dh.ExecNoQuery("update countrylanguage set Percentage=4.4 where Percentage=@Percentage", new Model.CountryLanguageModel { Percent = 1.6m });
  59. //取得分页查询的Sql,传入Sql语句,和排序列,是否正序,返回第1页,每页返回10条。
  60. var pageSql = dh.Driver.GetPagedSql("select * from countrylanguage", "CountryCode", true, 1, 10);
  61. //取得分页查询的结果,传入Sql语句,和排序列,是否正序,返回第1页,每页返回10条。
  62. var pageResult = dh.GetPagedResult<Model.CountryLanguageModel>("select * from countrylanguage", "countrycode", true, 1, 10);
  63. List<Model.CountryLanguageModel> data = pageResult.Data;
  64. int totalRecordCount = pageResult.Total;
  65. int pageNum = pageResult.PageNumber;
  66. int pageSize = pageResult.PageSize;
  67. //一个事务中,批量执行Sql语句。
  68. var sql1 = new SqlBatch("update countrylanguage set Percentage=4.4 where 1=2");
  69. var sql2 = new SqlBatch("update countrylanguage set Percentage=4.4 where 1=4");
  70. var sql3 = new SqlBatch("update countrylanguage set Percentage=4.4 where 1=6");
  71. var isCommitOk = dh.ExecBatch(new SqlBatch[] { sql1, sql2, sql3 }, true)>0;
  72. }
  73. }

其中测试实体类:

  1. public class Student
  2. {
  3. [Cocon90.Db.Common.Attribute.Column(PrimaryKey = true)]
  4. public Guid? Id { get; set; }
  5. public string Name { get; set; }
  6. public string Addrss { get; set; }
  7. public DateTime? Birthday { get; set; }
  8. }
  1. [Table(TableName = "CountryLanguage")]
  2. public class CountryLanguageTab
  3. {
  4. [Column(PrimaryKey = true, ColumnName = "CountryCode")]
  5. public int? Code { get; set; }
  6. [Column(PrimaryKey = true, CreateDDL = "varchar(20)")]
  7. public string Language { get; set; }
  8. public bool? IsOfficial { get; set; }
  9. [Column(ColumnName = "Percentage", PrimaryKey = false)]
  10. public decimal? Percent { get; set; }
  11. public DateTime? Date { get; set; }
  12. public Guid? Guid { get; set; }
  13. }
  14. [Table(TableName = "CountryLanguage")]
  15. public class CountryLanguageModel : CountryLanguageTab
  16. {
  17. [Ignore]
  18. public string CodeAndLang { get; set; }
  19. }

需要注意的是,实体的设计时,所有类型都必须可以为NULL值(如果是结构体类型,请采用可空类型)。