0
I am developing a three-layer application, but there is a mistake when saving other data types that are not string type!
Follow the code below:
//Camada dados Método inserir produto!
public string Inserir(Dproduto Produto)
{
    string resp = "";
    SqlConnection SqlCon = new SqlConnection();
    try
    {
        //codigo 
        SqlCon.ConnectionString = ConexaoBd.Cn;
        SqlCon.Open();
        SqlCommand SqlCmd = new SqlCommand();
        SqlCmd.Connection = SqlCon;
        SqlCmd.CommandText = "spinserir_produto";
        SqlCmd.CommandType = CommandType.StoredProcedure;
        SqlParameter ParId = new SqlParameter();
        ParId.ParameterName = "@codigo";
        ParId.SqlDbType = SqlDbType.Int;
        ParId.Direction = ParameterDirection.Output;
        SqlCmd.Parameters.Add(ParId);
        //nome
        SqlParameter ParNome = new SqlParameter();
        ParNome.ParameterName = "@nome";
        ParNome.SqlDbType = SqlDbType.VarChar;
        ParNome.Size = 20;
        ParNome.Value = Produto.nome;
        SqlCmd.Parameters.Add(ParNome);
        //finalidade
        SqlParameter ParFinalidade = new SqlParameter();
        ParFinalidade.ParameterName = "@finalidade";
        ParFinalidade.SqlDbType = SqlDbType.VarChar;
        ParFinalidade.Size = 50;
        ParFinalidade.Value = Produto.finalidade;
        SqlCmd.Parameters.Add(ParFinalidade);
        //Unidade
        SqlParameter ParUnidade = new SqlParameter();
        ParUnidade.ParameterName = "@unidade";
        ParUnidade.SqlDbType = SqlDbType.VarChar;
        ParUnidade.Size = 50;
        ParUnidade.Value = Produto.unidade;
        SqlCmd.Parameters.Add(ParUnidade);
        //CATEGORIA
        SqlParameter ParIdCategoria = new SqlParameter();
        ParIdCategoria.ParameterName = "@id_categoria";
        ParIdCategoria.SqlDbType = SqlDbType.Int;
        ParIdCategoria.Value = Produto.idCategoria;
        SqlCmd.Parameters.Add(ParIdCategoria);
        //FORNECEDOR
        SqlParameter ParIdFornecedor = new SqlParameter();
        ParIdFornecedor.ParameterName = "@id_fornecedor";
        ParIdFornecedor.SqlDbType = SqlDbType.Int;
        ParIdFornecedor.Value = Produto.idFornecedor;
        SqlCmd.Parameters.Add(ParIdFornecedor);
        SqlParameter ParPrecoVenda = new SqlParameter();
        ParPrecoVenda.ParameterName = "@valor";
        ParPrecoVenda.SqlDbType = SqlDbType.Money;
        ParPrecoVenda.Size = 40;
        ParPrecoVenda.Value = Produto.valorVenda;
        SqlCmd.Parameters.Add(ParPrecoVenda);
        SqlParameter ParPrecoCompra = new SqlParameter();
        ParPrecoCompra.ParameterName = "@custo";
        ParPrecoCompra.SqlDbType = SqlDbType.Money;
        ParPrecoCompra.Size = 40;
        ParPrecoCompra.Value = Produto.valorCusto;
        SqlCmd.Parameters.Add(ParPrecoCompra);
        SqlParameter ParQuantidade = new SqlParameter();
        ParQuantidade.ParameterName = "@quantidade";
        ParQuantidade.SqlDbType = SqlDbType.Int;
        ParQuantidade.Value = Produto.quantidade;
        SqlCmd.Parameters.Add(ParQuantidade);
        //Executar
        resp = SqlCmd.ExecuteNonQuery() == 1 ? "OK" : "Registro Não Foi Inserido!";
    }
    catch (Exception ex)
    {
        resp = ("Erro ao inserir" + ex.Message);
    }
    finally
    {
        if (SqlCon.State == ConnectionState.Open) SqlCon.Close();
    }
    return resp;
}
//Camada negocio metodo inserir
public static string Inserir(string nome,
         string finalidade, string unidade, int idCategoria, int idFornecedor,
        decimal valorVenda, decimal valorCusto, int quantidade)
{
    Dproduto Obj = new CamadaDados.Dproduto();
    Obj.Nome = nome;
    Obj.Finalidade= finalidade;
    Obj.Unidade = unidade;
    Obj.IdCategoria = idCategoria;
    Obj.IdFornecedor = idFornecedor;
    Obj.ValorVenda = valorVenda;
    Obj.ValorCusto = valorCusto;
    Obj.Quantidade = quantidade;
    return Obj.Inserir(Obj);
}
//Botao Salvar do meu formulario
private void btn_salvar_Click(object sender, EventArgs e)
{
    try
    {
        string resp = "";
        if (this.txtNome.Text == string.Empty)
        {
            MensagemErro("Preencha todos os campos!");
            errorIcone.SetError(txtNome, "Insira o nome!");
        }
        else
        {
            if (this.eNovo)
            {
                resp = Nproduto.Inserir(this.txtNome.Text, this.cbMarca.Text, this.cbUnidade.Text, Int32.Parse(this.txtCategoria.Text),
                  Int32.Parse(this.txtFornecedor.Text),decimal.Parse(this.txtValor.Text),
                  decimal.Parse(this.txtCusto.Text), Int32.Parse(this.txtEstoque.Text));
            }    
        }
    }
}
//mensagem de Erro