Dapper 插入操作
- Dapper 提供
Execute()扩展方法,用来执行增、删、改 SQL,返回受影响行数(int)。 - 插入思路:手写带参数占位符
@参数名的INSERTSQL;传入实体对象自动映射参数,杜绝SQL注入。 - 语法规范:
INSERT INTO 表名(列1,列2...) VALUES(@参数1,@参数2...)
例子
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
using System.Collections.Generic;
namespace DapperDemo
{
class Program
{
static void Main(string[] args)
{
// 1.读取连接字符串
var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
// 2.using自动释放数据库连接
using (IDbConnection db = new MySqlConnection(connStr))
{
// 3.编写插入SQL,操作 student 表
string sql = @"INSERT INTO student (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email)";
// 4.构造实体对象
var stu = new Student()
{
FirstName = "foxdevelop",
LastName = "com",
Email = "admin@foxdevelop.com"
};
// 5.执行插入,返回受影响行数
int rows = db.Execute(sql, stu);
// 6.查询验证数据
List<Student> stuList = db.Query<Student>("SELECT * FROM student").ToList();
}
Console.ReadKey();
}
}
// Student实体类(属性名必须和SQL参数@名称一致)
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}Code language: HTML, XML (xml)
说明
- 参数映射规则
Dapper 自动根据实体属性名匹配 SQL 中@xxx参数,名称大小写不敏感,但尽量保持一致。 - Execute 返回值
int rowsAffected = db.Execute(sql, stu);
- 返回 ≥1:插入成功;
- 返回 0:没有任何数据被插入。
- 连接字符串配置(App.config)
<configuration>
<connectionStrings>
<add name="StudentConnection"
connectionString="server=localhost;database=testdb;uid=root;pwd=123456"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
</configuration>Code language: HTML, XML (xml)
获取新增数据自增主键ID(MySQL)
如果 student 表存在自增主键 Id,想要拿到新增记录id:
string sql = @"INSERT INTO student (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email);
SELECT LAST_INSERT_ID();";
long newStudentId = db.ExecuteScalar<long>(sql, stu);Code language: HTML, XML (xml)