WPF 手撸插件 八 操作数据库一
1、本文将使用SqlSugar创建Sqlite数据库,进行入门的增删改查等操作。擦,咋写着写着凌乱起来了。
SqlSugar官方文档:简单示例,1分钟入门 - SqlSugar 5x - .NET果糖网
2、环境SqlSugar V5.0版本需要.Net Framework 4.6 ,NuGet添加内容如下,安装红框中的内容就可以了。这里的数据库demo.db是自动创建的。
3、运行效果如下图 。
4、整体代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;namespace ConsoleAppSqlSugar
{class Program{static void Main(string[] args){Console.WriteLine("启动");// 创建数据库对象SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = "datasource=demo.db",DbType = DbType.Sqlite,IsAutoCloseConnection = true}, db =>{db.Aop.OnLogExecuting = (sql, pars) =>{//获取原生SQL推荐 5.1.4.63 性能OKConsole.WriteLine(UtilMethods.GetNativeSql(sql,pars));//获取无参数化 SQL 对性能有影响,特别大的SQL参数多的,调试使用//Console.WriteLine(UtilMethods.GetSqlString(DbType.Sqlite,sql,pars));};//注意多租户 有几个设置几个//db.GetConnection(5).Aop;});bool isExit = true;while (isExit){Console.WriteLine("请输入:");Console.WriteLine("1、创建数据库。");Console.WriteLine("2、创建数据表。");Console.WriteLine("3、查询表的所有。");Console.WriteLine("4、插入数据。");Console.WriteLine("5、更新数据。");Console.WriteLine("6、删除数据。");Console.WriteLine("7、退出");int result;if (int.TryParse(Console.ReadLine(),out result)){switch (result){case 1:Db.DbMaintenance.CreateDatabase();//达梦和Oracle不支持建库break;case 2:Db.CodeFirst.InitTables<ToDos>();//所有库都支持break;case 3://查询表的所有var list = Db.Queryable<ToDos>().ToList();foreach (ToDos item in list){Console.WriteLine("ToDoName:"+item.ToDoName+" "+ "ToDoDescription:" + item.ToDoDescription);}break;case 4://插入int num1=Db.Insertable(new ToDos() { ToDoName = "任务名称", ToDoDescription = "任务描述" }).ExecuteCommand();if (num1>0){Console.WriteLine("插入数据成功");}break;case 5://更新int num2 = Db.Updateable(new ToDos() { Id = 1, ToDoName = "任务名称更新", ToDoDescription = "任务描述更新" }).ExecuteCommand();if (num2 > 0){Console.WriteLine("更新数据成功");}break;case 6://删除int num3 = Db.Deleteable<ToDos>().Where(it => it.Id == 1).ExecuteCommand();if (num3 > 0){Console.WriteLine("删除数据成功");}break;case 7:isExit = false;break;default:isExit = false;break;}}}Console.WriteLine("输入回车退出程序。");Console.ReadLine();}}
}
5、简单的仓储,其实官网也有很合的仓储示例。仓储简单类代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;namespace ConsoleAppSqlSugar
{//定义一个泛型仓储类,继承自SimpleClient<T>,T是一个类的泛型参数public class SqlSugarRepository<T>:SimpleClient<T> where T:class,new(){//构造函数public SqlSugarRepository(){//创建SqlSugarClient实例,用于数据库操作。var db = new SqlSugarClient(new ConnectionConfig(){ConnectionString = "datasource=demo.db",DbType = DbType.Sqlite,IsAutoCloseConnection = true});//将创建的SqlSugarClient实例复制给继承自SimlpeClient<T>的Context属性base.Context = db;//配置AOP拦截器,在SQL语句执行前输出SQL语句控制器db.Aop.OnLogExecuting = (sql, pars) =>{Console.WriteLine(sql); //控制台输出执行的SQL语句};}}
}
调用代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;namespace ConsoleAppSqlSugar
{class Program{static void Main(string[] args){Console.WriteLine("启动");// 创建数据库对象//SqlSugarClient Db = new SqlSugarClient(new ConnectionConfig()//{// ConnectionString = "datasource=demo.db",// DbType = DbType.Sqlite,// IsAutoCloseConnection = true//}, db =>//{// db.Aop.OnLogExecuting = (sql, pars) =>// {// //获取原生SQL推荐 5.1.4.63 性能OK// Console.WriteLine(UtilMethods.GetNativeSql(sql,pars));// //获取无参数化 SQL 对性能有影响,特别大的SQL参数多的,调试使用// //Console.WriteLine(UtilMethods.GetSqlString(DbType.Sqlite,sql,pars));// };// //注意多租户 有几个设置几个// //db.GetConnection(5).Aop;//});//创建ToDos类型的仓储实例。var toDosRepository = new SqlSugarRepository<ToDos>();bool isExit = true;while (isExit){Console.WriteLine("请输入:");Console.WriteLine("1、创建数据库。");Console.WriteLine("2、创建数据表。");Console.WriteLine("3、查询表的所有。");Console.WriteLine("4、插入数据。");Console.WriteLine("5、更新数据。");Console.WriteLine("6、删除数据。");Console.WriteLine("7、退出");int result;if (int.TryParse(Console.ReadLine(),out result)){switch (result){case 1://Db.DbMaintenance.CreateDatabase();//达梦和Oracle不支持建库toDosRepository.Context.DbMaintenance.CreateDatabase();break;case 2://Db.CodeFirst.InitTables<ToDos>();//所有库都支持toDosRepository.Context.CodeFirst.InitTables<ToDos>();//所有库都支持break;case 3://查询表的所有//var list = Db.Queryable<ToDos>().ToList();var list = toDosRepository.Context.Queryable<ToDos>().ToList();foreach (ToDos item in list){Console.WriteLine("ToDoName:"+item.ToDoName+" "+ "ToDoDescription:" + item.ToDoDescription);}break;case 4://插入//int num1=Db.Insertable(new ToDos() { ToDoName = "任务名称", ToDoDescription = "任务描述" }).ExecuteCommand();int num1 = toDosRepository.Context.Insertable(new ToDos() { ToDoName = "任务名称", ToDoDescription = "任务描述" }).ExecuteCommand();if (num1>0){Console.WriteLine("插入数据成功");}break;case 5://更新//int num2 = Db.Updateable(new ToDos() { Id = 1, ToDoName = "任务名称更新", ToDoDescription = "任务描述更新" }).ExecuteCommand();int num2 = toDosRepository.Context.Updateable(new ToDos() { Id = 1, ToDoName = "任务名称更新", ToDoDescription = "任务描述更新" }).ExecuteCommand();if (num2 > 0){Console.WriteLine("更新数据成功");}break;case 6://删除//int num3 = Db.Deleteable<ToDos>().Where(it => it.Id == 1).ExecuteCommand();int num3 = toDosRepository.Context.Deleteable<ToDos>().Where(it => it.Id == 1).ExecuteCommand();if (num3 > 0){Console.WriteLine("删除数据成功");}break;case 7:isExit = false;break;default:isExit = false;break;}}}Console.WriteLine("输入回车退出程序。");Console.ReadLine();}}
}