diff --git "a/\346\236\227\347\243\212/2024-06-03.md" "b/\346\236\227\347\243\212/2024-06-03.md" new file mode 100644 index 0000000000000000000000000000000000000000..a79579f568d673779f52cf0788ad6ec0853a4f5b --- /dev/null +++ "b/\346\236\227\347\243\212/2024-06-03.md" @@ -0,0 +1,89 @@ +## 增加 +DataBase dataBase = new DataBase(); + SqlConnection sqlConnection = dataBase.getConn(); + + //打开连接 + sqlConnection.Open(); + + + //定义sql语句 + string sql = "insert into test1007.guest.person values('"+personIdText.Text+"','"+personNameText.Text+"','"+personPasswordText.Text+"','"+personRoleText.SelectedItem.ToString()+"')"; + + //执行sqlCommand对象 + SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection); + + sqlCommand.ExecuteNonQuery(); + MessageBox.Show("员工信息保存成功!"); + + //关闭连接 + sqlConnection.Close(); + +## 修改 +DataBase dataBase = new DataBase(); + SqlConnection sqlConnection = dataBase.getConn(); + + //打开连接 + sqlConnection.Open(); + + + //定义sql语句 + string sql = "update test1007.guest.person set name='"+personNameText.Text+"',password='"+personPasswordText.Text+"',role='"+personRoleText.SelectedItem.ToString()+"' where id='"+personIdText.Text+"'"; + + //执行sqlCommand对象 + SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection); + + sqlCommand.ExecuteNonQuery(); + MessageBox.Show("员工信息修改成功!"); + + //关闭连接 + sqlConnection.Close(); + +## 查询 +DataBase dataBase = new DataBase(); + SqlConnection sqlConnection = dataBase.getConn(); + + //打开连接 + sqlConnection.Open(); + + + //定义sql语句 + string sql = "select * from test1007.guest.person where role = '"+checkPerson.Text+"'"; + + //执行sqlCommand对象 + SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection); + + //创建数据适配器 + SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); + + //执行sql语句 + sqlDataAdapter.SelectCommand = sqlCommand; + + //创建数据集 + DataSet dataSet = new DataSet(); + + sqlDataAdapter.Fill(dataSet, "test1007.guest.person"); + + personData.DataSource = dataSet.Tables[0]; + + //关闭连接 + sqlConnection.Close(); + +## 删除 +DataBase dataBase = new DataBase(); + SqlConnection sqlConnection = dataBase.getConn(); + + //打开连接 + sqlConnection.Open(); + + + //定义sql语句 + string sql = "delete from test1007.guest.person where id = '"+key+"'"; + + //执行sqlCommand对象 + SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection); + + sqlCommand.ExecuteNonQuery(); + MessageBox.Show("员工信息删除成功!"); + + //关闭连接 + sqlConnection.Close(); \ No newline at end of file diff --git "a/\346\236\227\347\243\212/2024-06-04.md" "b/\346\236\227\347\243\212/2024-06-04.md" new file mode 100644 index 0000000000000000000000000000000000000000..51d6ed5de46953749fca9e12a45d4cfd50fcbdda --- /dev/null +++ "b/\346\236\227\347\243\212/2024-06-04.md" @@ -0,0 +1,60 @@ +## 仓储接口(Repository interface) + +```c# +仓储(Respository)是存在于工作单元和数据库之间单独分离出来的一层, +是对数据访问的封装。其优点: + +1)业务层不需要知道它的具体实现,达到了分离关注点。 + +2)提高了对数据库访问的维护,对于仓储的改变并不会改变业务的逻辑, +数据库可以用Sql Server(该系列博客使用)、MySql等。 + +以下是一个使用IsolatedStorage的简单示例,这是一个在.NET框架中用于在客户端计算机上存储用户个性化数据的API。 +using System; +using System.IO; +using System.IO.IsolatedStorage; + +public class UserSettings +{ + private const string SettingsFile = "settings.dat"; + + public static void SaveSetting(string key, string value) + { + using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) + { + using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(SettingsFile, FileMode.OpenOrCreate, store)) + { + using (StreamWriter writer = new StreamWriter(stream)) + { + writer.WriteLine(key + "=" + value); + } + } + } + } + + public static string ReadSetting(string key) + { + using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication()) + { + if (store.FileExists(SettingsFile)) + { + using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(SettingsFile, FileMode.Open, store)) + { + using (StreamReader reader = new StreamReader(stream)) + { + string line; + while ((line = reader.ReadLine()) != null) + { + string[] keyValue = line.Split('='); + if (keyValue[0] == key) + { + return keyValue[1]; + } + } + } + } + } + } + return null; + } +} \ No newline at end of file diff --git "a/\346\236\227\347\243\212/2024-06-06.md" "b/\346\236\227\347\243\212/2024-06-06.md" new file mode 100644 index 0000000000000000000000000000000000000000..fb698f193fcac06a81842c5a6ae75025d77fa745 --- /dev/null +++ "b/\346\236\227\347\243\212/2024-06-06.md" @@ -0,0 +1,17 @@ +# 笔记 + +1. EF Core简介 + +Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。 + +EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点: + + 使 .NET 开发人员能够使用 .NET 对象处理数据库。 + 无需再像通常那样编写大部分数据访问代码。 + +EF Core 支持多个数据库引擎,请参阅数据库提供程序了解详细信息。 + +Code First :先编写 C# 实体类,EF Core 会根据实体类之间的关系创建数据库; + +Database First :先设计和创建数据库,EF Core 根据数据库的表结构生成 C# 实体类。 +———————————————— diff --git "a/\346\236\227\347\243\212/2024-06-07.md" "b/\346\236\227\347\243\212/2024-06-07.md" new file mode 100644 index 0000000000000000000000000000000000000000..9da9ec02a35d23574773fb127a94d244b5c48b05 --- /dev/null +++ "b/\346\236\227\347\243\212/2024-06-07.md" @@ -0,0 +1,92 @@ +# 笔记 +EF Core -- 增删改查 + +先new一个context实例,通过绑定跟踪的DbSet实体,实现数据操作 + +private CodeFContext codeFContext= new CodeFContext(); + + 查询 + + private List _books; + + public List Books + { + get => _books; + set => SetProperty (ref _books, value); + } + //查询Book表所有数据 + Books = codeFContext.Books.ToList(); + //条件查询,linq操作 + Books = codeFContext.Books.Where(x => x.Id > 3).ToList(); +插入 + + private async void InsertData() + { + var books=new List() { + new Book() { Title ="追风筝的人"}, + new Book() { Title ="霍乱时期的爱情"} + }; + //修改DbSet + codeFContext.Books.AddRange(books); + //再save更改 + await codeFContext.SaveChangesAsync(); + } + +更新 + + private async void UpdateData() + { + //需要先查询 + var books = codeFContext.Books.Where(x => x.Title == "追风筝的人"); + //再对查询到的数据进行修改 + foreach (var item in books) + { + item.Title = "放学后"; + } + //再save更改 + await codeFContext.SaveChangesAsync(); + + } + +删除 + + private async void DeleteData() + { + //先Linq查询 + var books= codeFContext.Books.Where(x => x.Id>5); + //从实体中删除数据 + codeFContext.Books.RemoveRange(books); + //再save更改 + await codeFContext.SaveChangesAsync(); + +7.1 使用EFCore.BulkExtensions操作Postgresql + 7.1.1 Bulk相关(一条操作一个事务,均是传入实体) + + //查询 + List students =new List(); + await dbFContext.BulkReadAsync(students); + //插入 + var students = new List(){ + new Student() {Id=1, Name = "AA" ,StuNum="2010"}, + new Student() {Id=2, Name = "BB" ,StuNum="2011"}, + new Student() {Id=3, Name = "CC",StuNum="2012" }}; + await dbFContext.BulkInsertAsync(students); + //删除 + var stus = dbFContext.Students; + await dbFContext.BulkDeleteAsync(stus.ToList()); + //更新 + var stus = dbFContext.Students.ToList(); + foreach (var item in stus) + { + item.Name += "QQQ"; + } + await dbFContext.BulkUpdateAsync(stus); + +7.1.2 Batch相关(按条件) + + //删除 + await dbFContext.Students.Where(x=>x.Name=="BB").BatchDeleteAsync(); + //更新(改成新数据) + await dbFContext.Students.Where(x => x.StuNum == "2222").BatchUpdateAsync(new Student() {StuNum="2233" }); + //更新(基于原数据) + await dbFContext.Students.Where(x => x.StuNum == "2233").BatchUpdateAsync(x=>new Student() { StuNum =x.StuNum+ "444" });