GRAVAR VALOR EM CAMPO DECIMAL

BETOPMJB 05/02/2016 19:29:19
#457189
gostaria de um exemplo para gravar valores em um campo decimal base de dados mysql.
KERPLUNK 05/02/2016 19:42:10
#457191
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();
BETOPMJB 05/02/2016 20:03:18
#457198
faço dessa forma mais 3 casas decimais está dando erro
KERPLUNK 05/02/2016 20:11:55
#457200
Tente usar a conversão de valores:

comm.Parameters.Add([Ô]@campo2[Ô], Convert.ToDecimal([Ô]1.9999[Ô]));
BETOPMJB 05/02/2016 23:52:48
#457215
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.
KERPLUNK 06/02/2016 01:05:07
#457222
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();

BETOPMJB 06/02/2016 15:02:15
#457250
Conexão de string como você usa pois as que eu usei não deu certo.
NILSONTRES 06/02/2016 15:22:51
#457251
vc tem que trocar a virgula pelo ponto.
BETOPMJB 06/02/2016 16:11:26
#457252
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);
}
DS2T 07/02/2016 03:06:48
#457270
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.
Tópico encerrado , respostas não são mais permitidas