Problems with the DAO

Asked

Viewed 117 times

0

My DAL class launched the Typeinitializationexception exception. How to correct?

Follows the code

public partial class FrmConvenio : Form
{

    ConvenioDAO convenioDAO = new ConvenioDAO(); // Lança TypeInitializationException

    public FrmConvenio()
    {
        InitializeComponent();
    }

    private void btnGravarConvenio_Click(object sender, EventArgs e)
    {
        using (SqlConnection conexao = new SqlConnection())
        {
            conexao.ConnectionString = ConfigurationManager.ConnectionStrings["dbConnString"].ConnectionString;
            try
            {
                conexao.Open();
                MessageBox.Show("Conexao Aberta");
                Convenio convenio = new Convenio(txtNomeConvenio.Text);

                convenioDAO.Inserir(conexao, convenio);
                MessageBox.Show("Convênio " + txtNomeConvenio.Text + " foi cadastrado com sucesso");
            }
            catch(Exception ex)
            {
                MessageBox.Show("Não foi possível gravar as informações no banco de dados" + ex.StackTrace + ex.Message);
            }
        }
    }
  }
}

DAO class

public class ConvenioDAO
{
    public static string connString = ConfigurationManager.ConnectionStrings["dbConnString"].ConnectionString;
    public static DbProviderFactory factory = DbProviderFactories.GetFactory(ConfigurationManager.AppSettings["dbProvider"]);

    /// <summary>
    /// Método que insere o nome do convênio no BD
    /// </summary>
    /// <param name="conn">Nome da conexao do banco que está configurado</param>
    /// <param name="c">Variável da classe convenio</param>
    public void Inserir(DbConnection conn, Convenio c)
    {
        DbCommand cmd = factory.CreateCommand();
        cmd.Connection = conn;
        cmd.CommandText = "INSERT INTO convenio (nome) VALUES (@Nome)";

        DbParameter param = factory.CreateParameter();
        param.ParameterName = "@Nome";
        param.Value = c.NomeConvenio;
        cmd.Parameters.Add(param);

        cmd.ExecuteNonQuery();
    }

    /// <summary>
    /// Método que retorna todos os convênios cadastrados no BD.
    /// </summary>
    /// <param name="conn">Nome da conexão do BD configurado.</param>
    /// <returns>Retorna uma lista de convenios cadastrados.</returns>
    public List<Convenio> ListarConvenio(DbConnection conn)
    {
        List<Convenio> convenio = new List<Convenio>();
        using (DbCommand cmd = factory.CreateCommand())
        {
            cmd.Connection = conn;
            cmd.CommandText = "SELECT codigo, nome FROM convenio ORDER BY codigo";

            using (DbDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    Convenio c = new Convenio();
                    c.codigo = (int)dr["codigo"];
                    c.NomeConvenio = (string)dr["nome"];
                    convenio.Add(c);
                }
            }
            return convenio;
        }
    }

    /// <summary>
    /// Método que exclui o convênio através do seu código.
    /// </summary>
    /// <param name="conn">Conexao de BD configurado.</param>
    /// <param name="codigo">Codigo da referencia que é passado como parametro para realizar a exclusão.</param>
    public void DeletarConvenio(DbConnection conn, int codigo)
    {
        DbCommand cmd = factory.CreateCommand();
        cmd.Connection = conn;
        cmd.CommandText = "DELETE FROM convenio WHERE codigo = @codigo";

        DbParameter param = factory.CreateParameter();
        param.ParameterName = "@codigo";
        param.Value = codigo;
        cmd.Parameters.Add(param);

        cmd.ExecuteNonQuery();
    }

    /// <summary>
    /// Método que atualiza os dados no BD
    /// </summary>
    /// <param name="conn">Conexão de BD configurado.</param>
    /// <param name="c">Objeto convenio passado por referencia.</param>
    public void AtualizarConvenio(DbConnection conn, Convenio c)
    {
        DbCommand cmd = factory.CreateCommand();
        cmd.Connection = conn;
        cmd.CommandText = "UPDATE convenio SET nome = @nome WHERE codigo = @codigo";

        DbParameter param = factory.CreateParameter();
        param.ParameterName = "@codigo";
        param.Value = c.codigo;
        cmd.Parameters.Add(param);

        param = factory.CreateParameter();
        param.ParameterName = "@nome";
        param.Value = c.NomeConvenio;
        cmd.Parameters.Add(param);

        cmd.ExecuteNonQuery();
    }
}
}
  • How is your class ConvenioDao() ?

  • Without knowing the context of your application it becomes impossible to help you.

  • Post the class code ConvenioDAO, please

  • I added the class I’m trying to use

  • 1

    Put a brakepoint on connString and factory and debug. I believe the error is there

  • 1

    Like your connection stringis stated in the app.config?

Show 1 more comment

1 answer

0

I believe that solves your problem. I simulated a "Convenio" object class. Classe Convenio:

public class Convenio
{
      public string Nome { get; set; }
}

Button code:

   private void btnGravarConvenio_Click(object sender, EventArgs e)
    {      
            Convenio convenio = new Convenio()
            convenio.Nome = txtNomeConvenio;
            ConvenioDao dao = new ConvenioDao()
            string resultado = dao.Inserir(convenio);
            MessageBox.Show(resultado);
     }

And last, the Dal class:

    public class Estoque__Dal
    { 
       private String strconn;
       private SqlConnection conn;

       public Estoque__Dal(){
     strconn =      ConfigurationManager.ConnectionStrings["principal"].ConnectionString; //@"Data Source= TI-2-PC\SQLEXPRESS;Initial Catalog=Estoque_CDR;User ID=sa;Password=18"; //string de conexão pegando do webconfig
    conn = new SqlConnection(strconn);
    conn.Close();

  }

   public string Inserir(Convenio p)
    {
        try{
        conn.Open();
        SqlTransaction transacao = conn.BeginTransaction();
        StringBuilder sb = new StringBuilder();
        String sqlProduto = "INSERT INTO [dbo].Convenio ([Nome] VALUES (@Nome)";
        SqlCommand cmdProduto = new SqlCommand(sqlProduto, conn, transacao);
        cmdProduto.Parameters.AddWithValue("@Nome", p.Nome);

        cmdProduto.ExecuteNonQuery();
        transacao.Commit();
        conn.Close();

        return "o "+p.Nome+"foi cadastrado com sucesso";
        }
        catch(Exception ex)
        {
        return "Erro ao gravar: "+ex.Message;
        }
    } 


}

Hugs!

Browser other questions tagged

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