Erro SQL 2812
13/04/2012
0
Gostaria de aber se podem me dar uma força nesse código!
public void Alterar(ProdutoInformation produto)
{
SqlConnection conn = new SqlConnection();
try
{
conn.ConnectionString = Dados.StringDeConexao;
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "UPDATE Produtos SET nome=@nome, preco=@preco, estoque=@estoque WHERE codigo=@codigo;";
cmd.Parameters.AddWithValue("@codigo", produto.Codigo);
cmd.Parameters.AddWithValue("@nome", produto.Nome);
cmd.Parameters.AddWithValue("@preco", produto.Preco);
cmd.Parameters.AddWithValue("@estoque", produto.Estoque);
cmd.Parameters.Add("@valorEstoque", SqlDbType.Int);
cmd.Parameters["@valorEstoque"].Direction = ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
decimal valorEstoque = Convert.ToDecimal(cmd.Parameters["@valorEstoque"]);
if (valorEstoque < 500)
{
throw new Exception("Atenção! Valor baixo no Estoque");
}
}
catch (SqlException ex)
{
throw new Exception("Servidor SQL Erro: " + ex.Number);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
conn.Close();
}
Valeu! Muito Obrigado!
Anderson Bernardi..
Posts
14/04/2012
Joel Rodrigues
Mas faça o seguinte: altere a propriedade CommandType para Text, afinal você não está usando um StoreedProcedure.
Boa sorte.
14/04/2012
Anderson Bernardi..
O erro é o seguinte:
System.Exception: Unabled to cast object of type System.Data.SqlClient.SqlParameter to type System.IConvertible.
Erro foi o dito agora, mas fez a alteração!
15/04/2012
Joel Rodrigues
Convert.ToDecimal(cmd.Parameters[@valorEstoque].Value);
Boa sorte.
20/05/2012
Anderson Bernardi..
(Object cannot be cast from DBNull to other types)
E o pior que ele altera os dados, o que pode ser?
Valeu e desculpa pela demora!
21/05/2012
Allan Perez
decimal? valorEstoque=null;
valorEstoque = Convert.ToDecimal(cmd.Parameters[@valorEstoque]);
E antes de utiliza-la verifique se não é nula if (valorEstoque.HasValue == true)
ou valorEstoque.GetValueOrDefault() conforme a sua necessidade.
Post
21/05/2012
Anderson Bernardi..
Estou postando o código de como ficou!
public void Alterar(ProdutoInformation produto)
{
SqlConnection cn = new SqlConnection();
try
{
cn.ConnectionString = Dados.StringDeConexao;
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = update Produtos set nome = @nome, preco = @preco, estoque = @estoque where codigo = @codigo;;
cmd.Parameters.AddWithValue(@codigo, produto.Codigo);
cmd.Parameters.AddWithValue(@nome, produto.Nome);
cmd.Parameters.AddWithValue(@preco, produto.Preco);
cmd.Parameters.AddWithValue(@estoque, produto.Estoque);
cmd.Parameters.Add(@valorEstoque, SqlDbType.Int);
cmd.Parameters[@valorEstoque].Direction = ParameterDirection.Output;
cn.Open();
cmd.ExecuteNonQuery();
valorEstoque = Convert.ToDecimal(cmd.Parameters[@valorEstoque].Value);
valorEstoque.GetValueOrDefault();
if (valorEstoque < 10)
{
throw new Exception(Atenção! Valor baixo no estoque);
}
}
catch (SqlException ex)
{
throw new Exception(Servidor SQL Erro: + ex.Number);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
cn.Close();
}
}
Agora bombou, Muito obrigado pela ajuda de vocês!
Clique aqui para fazer login e interagir na Comunidade :)