GRAVAR VALOR EM CAMPO DECIMAL
gostaria de um exemplo para gravar valores em um campo decimal base de dados mysql.
Simples, use parâmetros:
MySqlConnection conn = new MySqlConnection([Ô]Sua connection string aqui[Ô]);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = [Ô]INSERT INTO tabela(campo1, campo2) VALUES(@campo1, @campo2)[Ô];
comm.Parameters.Add([Ô]@campo1[Ô], [Ô]bla bla bla[Ô]);
comm.Parameters.Add([Ô]@campo2[Ô], 1.99);
comm.ExecuteNonQuery();
conn.Close();
faço dessa forma mais 3 casas decimais está dando erro
Tente usar a conversão de valores:
comm.Parameters.Add([Ô]@campo2[Ô], Convert.ToDecimal([Ô]1.9999[Ô]));
exemplo tenho 10,000 kilos de um determinado produto estou vendendo 0,405 gramas, usando da forma que me foi passado acima ao guando mando gravar a quantidade de estoque nova 9,595 o valor gravado é de 95,950.
Ja tentei de varias formas mais não vai.
Ja tentei de varias formas mais não vai.
Basta usar a query da maneira correta:
MySqlConnection conn = new MySqlConnection([Ô]Sua connection string aqui[Ô]);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = [Ô]Update SUA_TABELA Set QtdEstoque = QtdEstoque - @quantidade Where IdProduto = @idproduto)[Ô];
comm.Parameters.Add([Ô]@quantidade[Ô], Convert.ToDecimal([Ô]0.405[Ô]);
comm.Parameters.Add([Ô]@idproduto[Ô], [Ô]99[Ô]);
comm.ExecuteNonQuery();
conn.Close();
Conexão de string como você usa pois as que eu usei não deu certo.
vc tem que trocar a virgula pelo ponto.
Estou usando dessa forma.
double QuantidadeBaixar = 0;
double EstoqueAtual = 0;
try
{
ConexaoDB.Conectar();
string MinhaSql = [Ô]Select (Estoque / 100) as MeuEstoque, CodP from Produtos where(CodP = [Ô] + CodigoProduto + [Ô])[Ô];
MySqlCommand cmd = new MySqlCommand(MinhaSql, ConexaoDB.conexao);
MySqlDataReader lendo = cmd.ExecuteReader();
if (lendo.Read())
{
EstoqueAtual = Convert.ToDouble(lendo[[Ô]MeuEstoque[Ô]].ToString());
}
lendo.Close();
QuantidadeBaixar = Convert.ToDouble(EstoqueAtual) - Convert.ToDouble(Quantidade);
string AlteraEstoque = [Ô]update produtos set Estoque=[ô][Ô] + Convert.ToDecimal([Ô]0.405[Ô]) + [Ô][ô] where CodP= [ô][Ô] + CodigoProduto.ToString() + [Ô][ô];[Ô];
MySqlCommand Comando = new MySqlCommand(AlteraEstoque, ConexaoDB.conexao);
Comando.ExecuteNonQuery();
ConexaoDB.Desconectar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), [Ô]A T E N Ç Ã O[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
}
double QuantidadeBaixar = 0;
double EstoqueAtual = 0;
try
{
ConexaoDB.Conectar();
string MinhaSql = [Ô]Select (Estoque / 100) as MeuEstoque, CodP from Produtos where(CodP = [Ô] + CodigoProduto + [Ô])[Ô];
MySqlCommand cmd = new MySqlCommand(MinhaSql, ConexaoDB.conexao);
MySqlDataReader lendo = cmd.ExecuteReader();
if (lendo.Read())
{
EstoqueAtual = Convert.ToDouble(lendo[[Ô]MeuEstoque[Ô]].ToString());
}
lendo.Close();
QuantidadeBaixar = Convert.ToDouble(EstoqueAtual) - Convert.ToDouble(Quantidade);
string AlteraEstoque = [Ô]update produtos set Estoque=[ô][Ô] + Convert.ToDecimal([Ô]0.405[Ô]) + [Ô][ô] where CodP= [ô][Ô] + CodigoProduto.ToString() + [Ô][ô];[Ô];
MySqlCommand Comando = new MySqlCommand(AlteraEstoque, ConexaoDB.conexao);
Comando.ExecuteNonQuery();
ConexaoDB.Desconectar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString(), [Ô]A T E N Ç Ã O[Ô], MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Então cara.
O Kerplunk fez um exemplo pra você usando parâmetros. No caso dele, ele não precisou se preocupar com questão de ponto e vÃrgula.
Você tá fazendo sem parâmetros, então tem que se atentar a esse tipo de problema.
Quando você converte isso para String:
Convert.ToDecimal([Ô]0.405[Ô])
Vai te retornar usando a formatação do seu sistema. Se tiver em PT, vai retornar uma vÃrgula aÃ. Então você teria que usar o Replace pra transformar essa vÃrgula em ponto e jogar na query.
Se eu fosse você, usaria parâmetros... não precisa se preocupar com isso.
O Kerplunk fez um exemplo pra você usando parâmetros. No caso dele, ele não precisou se preocupar com questão de ponto e vÃrgula.
Você tá fazendo sem parâmetros, então tem que se atentar a esse tipo de problema.
Quando você converte isso para String:
Convert.ToDecimal([Ô]0.405[Ô])
Vai te retornar usando a formatação do seu sistema. Se tiver em PT, vai retornar uma vÃrgula aÃ. Então você teria que usar o Replace pra transformar essa vÃrgula em ponto e jogar na query.
Se eu fosse você, usaria parâmetros... não precisa se preocupar com isso.
Tópico encerrado , respostas não são mais permitidas