- Atualizações no Dapper usam o método
Execute()para rodar comandosUPDATEe retornam o número de linhas afetadas. - A cláusula
WHEREé obrigatória; sem ela todos os registros da tabela serão alterados! - Não recomendado: montar SQL com concatenação de strings (abordagem simples do texto original). Isso cria uma vulnerabilidade de injeção de SQL.
- Recomendado: consultas parametrizadas com
@NomeDoParametro, utilizando objetos de entidade ou classes anônimas para mapeamento automático.
Observação original: a lógica de atualização é parecida com a de inserção; escreva o comando
UPDATEe useWHEREpara alterar apenas as linhas‑alvo.
Exemplo
// Código perigoso! Concatenação de string traz risco de injeção SQL, apenas exemplo de má prática
using (IDbConnection db = new MySqlConnection(conn))
{
var id = 1;
string sqlUpdate = "UPDATE student set FirstName='NovoPrimeiroNome',LastName='NovoSobrenome',Email='NovoEmail' WHERE Id=" + id;
int rows = db.Execute(sqlUpdate);
var info = db.Query<Student>("Select * From student WHERE Id=" + id, new { id }).SingleOrDefault();
}Code language: C# (cs)
Forma parametrizada padrão
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
static void Main(string[] args)
{
var conn = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
using (IDbConnection db = new MySqlConnection(conn))
{
// 1.SQL de atualização com marcadores de parâmetro @
string sqlUpdate = @"UPDATE student
SET FirstName=@FirstName, LastName=@LastName, Email=@Email
WHERE Id=@Id";
// 2.Montar dados de atualização com objeto de entidade
var stu = new Student()
{
Id = 1,
FirstName = "foxdevelop",
LastName = "com",
Email = "admin@foxdevelop.com"
};
// 3.Executar atualização e capturar linhas afetadas
int rowsAffected = db.Execute(sqlUpdate, stu);
// 4.Consultar para validar o resultado
var studentInfo = db.Query<Student>(
"SELECT * FROM student WHERE Id=@Id",
new { Id = 1 }
).SingleOrDefault();
}
Console.ReadKey();
}
// Classe de entidade Student
public class Student
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}Code language: C# (cs)
- A cláusula WHERE é indispensável
Esquecer oWHEREresulta emUPDATE student SET xxx, sobrescrevendo toda a tabela e causando problemas sérios. - Correspondência dos nomes de parâmetros
Não diferencia maiúsculas e minúsculas entre o@NomeDoParametrono SQL e as propriedades da entidade ou classe anônima, mas os nomes devem ser idênticos. - Significado do valor de retorno
int rowsAffected: valor maior que zero significa linhas atualizadas; zero significa que nenhum registro correspondente foi encontrado. - Aviso de segurança
Nunca construa SQL concatenando strings. Dados vindos de fora podem provocar ataques de injeção de SQL.
Atualizar apenas alguns campos
Se quiser alterar somente o e‑mail, não é preciso listar todas as colunas:
UPDATE student SET Email=@Email WHERE Id=@Id
Operação de atualização
Previous: Inserção