【WinForm】 自学笔记三:使用 FreeSql 连接数据库,并对数据进行增删改查
前面使用 SqlConnection 连接数据可以的方法,每一次进行数据操作都要编写相应的SQL语句,操作起来比较繁琐。
为了简化代码的编写,提高代码的可靠性,使用了 FreeSql 插件,来减少代码的编写,提升开发效率。
FreeSql 官方文档地址: https://freesql.net/guide/#freesql
一、前期准备
1.根据要连接的数据库类型,使用Nuget安装相应的程序包
2. 在配置文件 App.Config 中添加连接的字符串。(也可以通过其他方式获取)
<add key="freeSqlConnectStr" value="Data Source=192.168.3.201;DataBase=Nine_Xhs_test;User Id=sa;Password=Nine!2021;"/>
二、使用 FreeSql 连接数据库
1.新建一个 Model 文件夹,保存数据库中的表结构,这里新建一个UserInfo 的表作为示例
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary> /// 用户信息 /// </summary> public class UserInfo { /// <summary> /// 用户ID /// </summary> [Column(IsPrimary = true)] //指定数据的ID,不指定的话,进行操作的时候会报错 public Guid Id { get; set; } /// <summary> /// 用户昵称 /// </summary> public string NickName { get; set; } /// <summary> /// 电话号码 /// </summary> public string Phone { get; set; } /// <summary> /// 简介 /// </summary> public string Desc { get; set; } /// <summary> /// 位置 /// </summary> public string Location { get; set; } }
2.初始化 FreeSql
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public Form4() { InitializeComponent(); } static IFreeSql _freeSql; private void Form4_Load(object sender, EventArgs e) { var freeSqlConnectStr = ConfigurationManager.AppSettings.Get("freeSqlConnectStr"); _freeSql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.SqlServer, freeSqlConnectStr) .UseAutoSyncStructure(true) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 .Build(); }
UseAutoSyncStructure:
为 false 时,不修改数据库的结构,查询的对象与数据库的字段不匹配时会报错。
为 true 时,会自动更新数据库的表设计。如果查询的表在数据库中不存在,会在数据库中新建一个表。如果查询的字段在数据库中不存在,则会自动在数据库的表中添加字段。
注意:
UseAutoSyncStructure为true时,会修改原来的表结构,未指定长度的字段会变成默认长度,还会修改字段的自增属性,需要慎用。
最好是将对象中指定字段的长度,以及自增属性,防止被FreeSql 修改为默认长度,导致程序出现问题。
需要添加引用:
using FreeSql.DataAnnotations;
字段自增的写法:
[Column(IsIdentity = true, IsPrimary = true)] public int Id { get; set; }
指定字段长度和类型的写法:
[Column(DbType = "nvarchar(2000)")] public string ShareUrl { get; set; }
三、使用 FreeSql 对数据进行操作
1.查询数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary> /// 获取最新数据 /// </summary> public void GetNewData() { List<UserInfo> data = _freeSql.Select<UserInfo>().ToList(); dataGridView1.DataSource = data; }
2.添加数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary> /// 添加新的用户数据 /// </summary> public void AddNewData(object sender, EventArgs e) { var nickName = nameInput.Text; if (string.IsNullOrWhiteSpace(nickName)) { MessageBox.Show("用户名称不能为空","提示信息"); } else { var decs = descInput.Text; var phone = phoneInput.Text; var location = locationInput.Text; var user = new UserInfo { Id = Guid.NewGuid(), NickName = nickName, Desc = decs, Phone = phone, Location = location, }; var result = _freeSql.Insert(user).ExecuteAffrows() > 0; if (result) { nameInput.Text = ""; descInput.Text = ""; phoneInput.Text = ""; locationInput.Text = ""; GetNewData(); MessageBox.Show("用户信息添加成功", "提示信息"); } else { MessageBox.Show("用户信息添加失败", "提示信息"); } } }
3.删除数据
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { int index = e.ColumnIndex; var id = ((List<UserInfo>)dataGridView1.DataSource)[index].Id; var result = _freeSql.Select<UserInfo>(id).ToDelete().ExecuteAffrows() > 0; if (result) { GetNewData(); MessageBox.Show("用户信息删除成功", "提示信息"); } else { MessageBox.Show("用户信息删除失败", "提示信息"); } }