How to make an "Insert" with Dapper using a class?

Asked

Viewed 6,315 times

7

I’m testing Dapper and when I try to use a class I found the error:

Must declare the scalar variable

Follows the code:

public class Teste
{
    public int id;
    public string nome;
    public int idade;
}

        using (IDbConnection db = new SqlConnection(conexao))
        {
            Teste t = new Teste();
            t.nome = "Iago";
            t.idade = 20;

            var newTeste = db.Execute("Insert Into Teste (nome, idade) Values(@nome, @idade)", t);

            var teste = db.Query("Select * From Teste");
        }

Table:

Create Table Teste (

 id int identity(1,1),
 nome varchar(50),
 idade int 
)

3 answers

7


You need to have properties in class, so change your class to:

public class Teste {
    public int Id { get; set; }
    public string Nome { get; set; }
    public int Idade { get; set; }
}

And change:

var newTeste = db.Execute("Insert Into Teste (nome, idade) Values(@Nome, @Idade)", t);

I put in the Github for future reference.

I would change the table column names too.

  • Maniero, thank you so much had not noticed the lack of get/set in the class. It worked great.

5

Try using the Dynamicparameter


public class Teste
{
    public int id;
    public string nome;
    public int idade;
}


//Necessário referenciar o Dapper na sua classe que faz o insert...
using Dapper;

//No seu método para salvar no banco de dados...
var parametros = new DynamicParameters();
parametros.Add("Nome", teste.nome, DbType.AnsiString);
parametros.Add("Idade", teste.idade , DbType.Int32);

db.Execute("Insert into Teste (nome, idade) Values(@Nome, @Idade)", parametros);

  • This mode I find better when it has several parameters. Improves the visualization.

2

I use via Procedure.

public class Teste
{
    public int id;
    public string nome;
    public int idade;
}

using (IDbConnection Connection = GetConnection())
{
    try
    {
        Connection.Execute("nome_da_sua_procedure",
            new {
                id = classeTeste.Data,
                nome = logChamadaoEntity.Entrada,
                idade = logChamadaoEntity.Saida                           
            },
            commandType: CommandType.StoredProcedure);                    
    }
    catch (System.Exception)
    {

        throw;
    }
    finally
    {
        Connection.Close();
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.