How to do an "insert" with Dapper using a class?

5

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

  Must declare the scalar variable

Follow 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 
)
    
asked by anonymous 02.10.2017 / 18:20

3 answers

3

You need to have properties in the 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 would change the column names of the table as well.

    
02.10.2017 / 18:42
2

Try using 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);

    
02.10.2017 / 20:35
1

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();
    }
}
    
01.11.2018 / 11:46