none
Erro ao Inserir Dados RRS feed

  • Pergunta

  • Boa noite!

    Estou tendo dificuldades para inserir as informações com parametros:

    private static void InsereNovoMenuParaOUsuario(int idAcao, DTO.ModulosProgramaAcoes acao)
            {
                using (var conn =  Conexao.ConectaDb()) {
                    var listUser = new List<DTO.ModulosMenuAcessoUser>();

                    var cmd = new SqlCommand
                    {
                        Connection = conn,
                        CommandType = CommandType.Text,
                        CommandText = "SELECT DISTINCT idUser FROM ModulosMenuAcessoUser"
                    };

                    conn.Open();

                    var adap = new SqlDataAdapter(cmd);
                    var dt = new DataTable();
                    adap.Fill(dt);


                    for (var i = 0; i < dt.Rows.Count; i++)
                    {
                        var user = new DTO.ModulosMenuAcessoUser()
                        {
                            IdUser = Convert.ToInt32(dt.Rows[i]["idUser"]),
                            IdModulo = acao.IdModulo,
                            IdPrograma = acao.IdPrograma,
                            IdAcao = idAcao
                        };

                        listUser.Add(user);
                    }

                    foreach (var acesso in listUser)
                    {

                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = "INSERT ModulosMenuAcessoUser(IdModulo,IdPrograma,IdAcoes,IdUser)" + Environment.NewLine +
                                           "VALUES " + Environment.NewLine +
                                           "(@IdModulo,@IdPrograma,@IdAcoes,@IdUser)";

                        cmd.Parameters.Add("@IdUser", SqlDbType.Int).Value = acesso.IdUser;
                        cmd.Parameters.Add("@IdModulo", SqlDbType.Int).Value = acesso.IdModulo;
                        cmd.Parameters.Add("@IdPrograma", SqlDbType.Int).Value = acesso.IdPrograma;
                        cmd.Parameters.Add("@IdAcoes", SqlDbType.Int).Value = acesso.IdAcao;

                    }

                    var transaction = conn.BeginTransaction();
                    cmd.Transaction = transaction;

                    try {
                        cmd.ExecuteNonQuery();
                        transaction.Commit();
                    }
                    catch (Exception e) {
                        transaction.Rollback();
                        throw e;
                    }

                }
            }

    exibe o seguinte erro:

    e={"O nome da variável '@IdUser' já foi declarado. Os nomes de variáveis devem ser exclusivos em um lote de consultas ou em um procedimento armazenado."}


    Andre Andriotti

    segunda-feira, 13 de agosto de 2018 21:21

Respostas

  • olá,

    deve ser porque ele acha que é uma única instrução sql, tenta colocar o  ";" no final da sql

    "(@IdModulo,@IdPrograma,@IdAcoes,@IdUser);";

    Se não der faz um insert por vez,e depois chama o commit. Faz o foreach dentro da transação aberta.

    terça-feira, 14 de agosto de 2018 14:53
    Moderador

Todas as Respostas

  • olá,

    deve ser porque ele acha que é uma única instrução sql, tenta colocar o  ";" no final da sql

    "(@IdModulo,@IdPrograma,@IdAcoes,@IdUser);";

    Se não der faz um insert por vez,e depois chama o commit. Faz o foreach dentro da transação aberta.

    terça-feira, 14 de agosto de 2018 14:53
    Moderador
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário favor abrir uma nova thread.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 19 de setembro de 2018 19:23
    Moderador