Operaciones de inserción con Dapper
- Dapper ofrece el método de extensión
Execute()para ejecutar sentencias SQL de inserción, actualización y borrado, devuelve el número de filas afectadas (int). - Forma de insertar: escribe manualmente una sentencia
INSERTcon marcadores de parámetro@NombreParametro; pasa un objeto de entidad para mapear parámetros de forma automática y evitar inyecciones SQL. - Sintaxis:
INSERT INTO NombreTabla(Columna1,Columna2...) VALUES(@Param1,@Param2...)
Ejemplo
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.Leer cadena de conexión
var connStr = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
// 2.using libera automáticamente la conexión de base de datos
using (IDbConnection db = new MySqlConnection(connStr))
{
// 3.Definir SQL de inserción para la tabla student
string sql = @"INSERT INTO student (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email)";
// 4.Crear objeto de entidad
var stu = new Student()
{
FirstName = "foxdevelop",
LastName = "com",
Email = "admin@foxdevelop.com"
};
// 5.Ejecutar inserción y obtener filas afectadas
int rows = db.Execute(sql, stu);
// 6.Consultar para comprobar los datos insertados
List<Student> stuList = db.Query<Student>("SELECT * FROM student").ToList();
}
Console.ReadKey();
}
}
// Clase entidad Student (los nombres de propiedad deben coincidir con los parámetros @ del SQL)
public class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
}Lenguaje del código: HTML, XML (xml)
Notas
- Reglas de mapeo de parámetros
Dapper empareja automáticamente las propiedades de la entidad con los parámetros@xxxdel SQL. No distingue mayúsculas y minúsculas, pero se recomienda mantener los nombres iguales. - Valor devuelto de Execute
int rowsAffected = db.Execute(sql, stu);
- Valor devuelto ≥1: inserción correcta;
- Valor devuelto 0: no se insertó ninguna fila.
- Configuración de la cadena de conexión (App.config)
<configuration>
<connectionStrings>
<add name="StudentConnection"
connectionString="server=localhost;database=testdb;uid=root;pwd=123456"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
</configuration>Lenguaje del código: HTML, XML (xml)
Obtener ID de clave primaria autoincremental de registros nuevos (MySQL)
Si la tabla student cuenta con clave primaria autoincremental Id, obtén el identificador del registro recién insertado:
string sql = @"INSERT INTO student (FirstName, LastName, Email)
VALUES (@FirstName, @LastName, @Email);
SELECT LAST_INSERT_ID();";
long newStudentId = db.ExecuteScalar<long>(sql, stu);Lenguaje del código: HTML, XML (xml)
Inserción
Previous: Primer ejemplo