dapper 连接mysql_使用Dapper访问SQL Server数据库

对应Demo程序名:DapperDemo

准备工作:为项目安装Dapper类库

方法一:项目中添加:项目名右键;Manage NuGet Packages;搜索Dappe;点击安装

方法二:在NuGet官网(https://www.nuget.org/)查询类库的安装命令:

搜索Dapper;找到安装命令(Install-Package Dapper -Version 1.60.6);在Visual Studio中打开包管理工具控制台(Tools→NuGget Package Manager→Packages Manager Console);

选中默认的项目(DapperDemo)并输入安装命令;回车

24274299c8461ac82c68edd0a43ab550.png

一、创建实体类,例如Person.cs

作用:Person类对应数据库中的Person表,各字段对应数据库表的各列。

1 public classPerson2 {3 public int Id { get; set; }4 public string FirstName { get; set; }5 public string LastName { get; set; }6 public string EmailAddress { get; set; }7 public DateTime CreatedOn { get; set; }8 public string IpAddress { get; set; }9

10 //定义一个属性,用来计算所有属性

11 ///

12 ///计算属性,返回用户的详细信息13 ///

14 public stringDisplay15 {16 get

17 {18 return $"{FirstName} {LastName} ({EmailAddress}) {IpAddress}";19 }20 }21 }

二、创建数据库连接帮助类DbHelper.cs

作用:从配置文件中读取数据库连接字符串。

1 public classDbHelper2 {3 ///

4 ///从配置文件中读取数据库连接字符串5 ///

6 public static stringConnectionString7 {8 get { return ConfigurationManager.ConnectionStrings["Dbconn"].ConnectionString; }9 }10 }

注:解决ConfigurationManager标红:添加引用Reference→Add Reference→System.Configuration,再在程序中引用using System.Configuration;

三、数据库连接配置(App.config)

作用:在配置文件中存放数据库连接信息,如需修改,只修改配置文件而不用修改源代码,符合开闭原则。

在节点下添加节点,存放数据库连接信息:

1

2

3

4

5

四、创建数据库访问类PersonService.cs

作用:连接并访问数据库,读取或写入到数据库。

1 public classPersonService2 {3 ///

4 ///根据用户姓氏查询用户集合5 ///

6 /// 姓氏

7 ///

8 public List FindListByLastName(stringlastName)9 {10 //SELECT * FROM Person WHERE LastName='Pye'

11 using (IDbConnection db = newSqlConnection(DbHelper.ConnectionString))12 {13 //where后直接跟变量来查询,不能避免SQL注入,应使用后边一种写法14 //string sql = $"SELECT * FROM Person WHERE LastName='{lastName}'";15 //IEnumerable list = db.Query(sql);16

17 //Dapper应对SQL注入18 //where后边限定属性LastName的必须是@LastName格式,且Query中添加匿名对象new { LastName = lastName},lastName在这里传入

19 string sql = $"SELECT * FROM Person WHERE LastName=@LastName";20 IEnumerable list = db.Query(sql, new { LastName =lastName});21 returnlist.ToList();22 }23 //using语句块结束后自动释放资源,释放数据库连接。

24 }25

26 ///

27 ///写入一条用户数据28 ///

29 /// 用户信息实体

30 ///

31 public boolInsert(Person person)32 {33 using (IDbConnection db = newSqlConnection(DbHelper.ConnectionString))34 {35 string sql = "INSERT INTO Person(FirstName, LastName, EmailAddress, CreatedOn) VALUES(@FirstName, @LastName, @EmailAddress, @CreatedOn)";36 int result =db.Execute(sql, person);37 return result > 0; //简化的转换写法

38 }39 }40

41 ///

42 ///删除一条用户数据43 ///

44 /// 用户Id

45 ///

46 public bool Delete(intpersonId)47 {48 using (IDbConnection db = newSqlConnection(DbHelper.ConnectionString))49 {50 string sql = "DELETE FROM Person WHERE Id = @Id"; //where很重要!!!

51 int result = db.Execute(sql, new { Id =personId });52 return result > 0; //简化的转换写法

53 }54 }55

56 ///

57 ///更新一条用户数据58 ///

59 /// 用户信息实体

60 ///

61 public boolUpdate(Person person)62 {63 using (IDbConnection db = newSqlConnection(DbHelper.ConnectionString))64 {65 string sql =

66 "UPDATE Person SET FirstName = @FirstName, LastName = @LastName, EmailAddress = @EmailAddress WHERE Id = @Id"; //where很重要!!!

67 int result =db.Execute(sql, person);68 return result > 0; //简化的转换写法

69 }70 }71

72 ///

73 ///根据用户Id查询用户74 ///

75 /// 用户Id

76 ///

77 public Person FindByPersonId(intpersonId)78 {79 using (IDbConnection db = newSqlConnection(DbHelper.ConnectionString))80 {81 string sql = $"SELECT * FROM Person WHERE Id=@Id";82 IEnumerable list = db.Query(sql, new { Id =personId });83 returnlist.FirstOrDefault();84 }85 }86 }

五、Dashboard界面

作用:分别实现增删改查方法。

后台代码中结合具体数据,调用PersonService中的访问数据库的方法,实现相关业务功能。

1 private void btnSearch_Click(objectsender, EventArgs e)2 {3 PersonService ps = newPersonService();4 List result =ps.FindListByLastName(txtSearchLastName.Text);5 lstSearchResult.DataSource =result;6 lstSearchResult.DisplayMember = "Display";7 }8

9 private void btnCreate_Click(objectsender, EventArgs e)10 {11 PersonService ps = newPersonService();12 Person person = newPerson()13 {14 FirstName =txtFirstName.Text,15 LastName =txtLastName.Text,16 EmailAddress =txtEmailAddress.Text,17 CreatedOn =DateTime.Now18 };19

20 var success =ps.Insert(person);21 MessageBox.Show(success ? "操作成功" : "操作失败");22 }23

24 private void btnDelete_Click(objectsender, EventArgs e)25 {26 PersonService ps = newPersonService();27 int personId =Convert.ToInt32(txtIndexPersonId.Text);28 var success =ps.Delete(personId);29 MessageBox.Show(success ? "操作成功" : "操作失败");30 }31

32 private void btnUpdate_Click(objectsender, EventArgs e)33 {34 PersonService ps = newPersonService();35 Person person = newPerson()36 {37 Id =Convert.ToInt32(txtIndexPersonId.Text),38 FirstName =txtFirstName.Text,39 LastName =txtLastName.Text,40 EmailAddress =txtEmailAddress.Text,41 CreatedOn =DateTime.Now42 };43

44 var success =ps.Update(person);45 MessageBox.Show(success ? "操作成功" : "操作失败");46 }47

48 private void btnIndex_Click(objectsender, EventArgs e)49 {50 PersonService ps = newPersonService();51 int personId =Convert.ToInt32(txtIndexPersonId.Text);52 var person =ps.FindByPersonId(personId);53

54 txtFirstName.Text =person.FirstName;55 txtLastName.Text =person.LastName;56 txtEmailAddress.Text =person.EmailAddress;57 }

前台界面如图:

dapper 连接mysql_使用Dapper访问SQL Server数据库_第1张图片

六、拓展TODO

可以不使用SQL语句,但要使用Dapper的扩展工具。

使用Dapper连接MySQL数据库

要另外使用MySql.Data库

数据库连接字符串格式为

2c1ccb37c424aa00228ec73d73de7c5c.png

使用Dapper连接SQLite数据库

要另外使用System.Data.SQLite库

对应的DEMO程序名:

151537c2a189460e28ef875ab056d6d8.png

通过IP地址连接远程共享文件夹中的SQLite数据库时,调试遇到的两个问题:

1.远程IP地址解析为C盘的地址,例如"\\192.168.1.10\MES\test.db"解析为:"C:\192.168.1.10\MES\test.db"

解决方法:字符串格式问题,应写为@"\\192.168.1.10\MES\test.db"

2.能够访问到远程共享文件夹后,可以新建数据库,但_dbConnection.Open();打开数据库时报错:unable to open database file

解决方法:首先尝试将远程文件夹的权限设为EveryOne拥有全部权限,未能解决;

然后尝试_dbConnection = new SQLiteConnection($"Data Source={dbFilePath};Version=3;", true); 设置parseViaFramework参数为true,问题解决。

parseViaFramework:Non-zero to parse the connection string using the built-in (i.e. framework provided) parser when opening the connection.非零,以在打开连接时使用内置(即提供的框架)解析器解析连接字符串。

dapper 连接mysql_使用Dapper访问SQL Server数据库_第2张图片

七、参考

你可能感兴趣的:(dapper,连接mysql)