对应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)并输入安装命令;回车

一、创建实体类,例如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 }

前台界面如图:

六、拓展TODO

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

使用Dapper连接MySQL数据库

要另外使用MySql.Data库

数据库连接字符串格式为

使用Dapper连接SQLite数据库

要另外使用System.Data.SQLite库

对应的DEMO程序名:

通过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数据库相关推荐

  1. vfp spt连接mysql_VFP中用SPT访问SQL Server数据库_mysql

    VFP因它简单易学,可快速建立应用软件而深受广大程序员喜爱,但其数据库系统不安全也令广大用户非常头痛.随着MS SQL Server数据库系统的推广应用,其强大的安全性能普遍受到好评.笔者在长期的编程 ...

  2. VB访问SQL Server数据库技术全揭密

    VB访问SQL Server数据库技术全揭密 2006-08-03 05:00作者:出处:电子技术责任编辑:方舟 摘 要: 本文讨论了Visual Basic应用程序访问SQL Server数据库的几 ...

  3. Serverless 解惑——函数计算如何访问 SQL Server 数据库

    函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务 ...

  4. Java案例:利用JDBC访问SQL Server数据库

    Java案例:利用JDBC访问SQL Server数据库 1.以sa为登录名连接数据库服务器 2.附加选课数据库Xk,如下图所示: 3.启动Eclipse,创建Java项目TestDB

  5. sql+plus远程连接mysql_设置sqlplus访问远程oracle数据库的方法

    如果要连接远程数据库,传统的一定可行的方法是在本地装一个oracle,然后使用"Network Configuration Assistant"配置,之后用PL/SQL Dev连接 ...

  6. 数据库封装 sql server mysql_【C#】SQL Server数据库操作封装类

    纯自用,为了拯救懒癌晚期(*´﹃`*) 别说跨平台了,跨程序我都懒得再写一次_(:з」∠)_ 发现一个bug,在程序运行足够快的情况下,GetRandomString方法会生成大量相同的数据 (现在已 ...

  7. c++访问数据库代码示例 occi_使用Python操作SQL Server数据库

    先说一下SQL Server 如果有条件可以使用远程连接或者TeamViewer等工具,操作带GUI的数据库管理器,实施起来可以很省心.可以直接查看结果,模板化查询甚至提示语句错误等. 如果是使用li ...

  8. linux系统python截图不显示中文_Linux系统通过python访问SQL SERVER,无法显示数据库内中文的问题...

    最近遇到几个需求,需要从centos上通过python访问sql server服务器查询数据,本来倒也不是很复杂,通过pyodbc比较顺利地实现了,具体如下: 先直接通过yum安装unixODBC.u ...

  9. C++中使用ODBC连接SQL Server数据库

    文章目录 整体总结 ODBC连接 一个修改别人的整体的例子 整体总结 用odbc过时了,还是使用ado吧,易用,高效率,不用配置odbc数据源,易维护,实际项目已从odbc中改用了ado,请看我的这篇 ...

最新文章

  1. 撞库:2017年的大麻烦
  2. 小试牛刀chrome来调试APP
  3. MongoDB索引问题
  4. ASP.NET MVC中同步与异步
  5. Objective-C之null NaN undefined
  6. 寄存器地址和内存地址_3. 从0开始学ARMARM模式、寄存器、流水线
  7. java jni调用dll_浅谈JNI的使用--java调用dll(原创)
  8. typeorm mysql2_指南 - 使用 TypeORM 和 Express 的示例 - 《TypeORM v0.2.20 中文文档》 - 书栈网 · BookStack...
  9. 解析事件总线的4种实现方式
  10. python创建配置文件_python3 如何创建一个.ini的配置文件。
  11. 如何单独编译Linux源代码中的驱动模块,比如NVMe驱动?
  12. 大话Seq2Seq模型
  13. OpenLdap-如何使用phpLdapAdmin创建CN用户、OU用户组
  14. 【k8s】kubernetes编写自己的operator(operator-sdk:v1.xxx)
  15. linux/android系统开发,高级adb 命令汇总
  16. flea-db使用之封装JDBC接入
  17. 国产蓝牙耳机哪款好?双11平价高性价比不输大牌蓝牙耳机推荐
  18. Java实现企业微信回调配置
  19. WorkBench简介
  20. 1949. 坚定的友谊

热门文章

  1. 无人机与地面站如何通信
  2. (算法设计与分析)第一章算法概述-第一节:算法基本概念和算法复杂性分析
  3. CSS核心内容:标准流、盒子模型、浮动、定位
  4. 2020笔记本性价比之王_【笔记本电脑选购】2020年有哪些款高性价比笔记本电脑值得推荐?(十一月更新)...
  5. vc中操作INI文件函数
  6. mysql5.155安装教程_git快速入门
  7. Python之小数点位数的控制输出
  8. 时域同步平均(TSA)降噪原理
  9. python的函数式编程实例_函数式编程例子
  10. 腾讯做互联网之水:从马化腾多元化遇挫说起