Operação de atualização

  1. Atualizações no Dapper usam o método Execute() para rodar comandos UPDATE e retornam o número de linhas afetadas.
  2. A cláusula WHERE é obrigatória; sem ela todos os registros da tabela serão alterados!
  3. Não recomendado: montar SQL com concatenação de strings (abordagem simples do texto original). Isso cria uma vulnerabilidade de injeção de SQL.
  4. 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 UPDATE e use WHERE para 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)
  1. A cláusula WHERE é indispensável
    Esquecer o WHERE resulta em UPDATE student SET xxx, sobrescrevendo toda a tabela e causando problemas sérios.
  2. Correspondência dos nomes de parâmetros
    Não diferencia maiúsculas e minúsculas entre o @NomeDoParametro no SQL e as propriedades da entidade ou classe anônima, mas os nomes devem ser idênticos.
  3. Significado do valor de retorno
    int rowsAffected: valor maior que zero significa linhas atualizadas; zero significa que nenhum registro correspondente foi encontrado.
  4. 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

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *