Erro SQL 2812
Não sei exatamente o que está acontecendo pois já tinha feito esse exemplo, e o pior que tinha funcionado, agora to remando.
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!
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..
Curtidas 0
Respostas
Joel Rodrigues
13/04/2012
Qual é mesmo o erro?
Mas faça o seguinte: altere a propriedade CommandType para Text, afinal você não está usando um StoreedProcedure.
Boa sorte.
Mas faça o seguinte: altere a propriedade CommandType para Text, afinal você não está usando um StoreedProcedure.
Boa sorte.
GOSTEI 0
Anderson Bernardi..
13/04/2012
Deu um novo erro, mas ele alterou!
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!
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!
GOSTEI 0
Joel Rodrigues
13/04/2012
Para recuperar o valor do parâmetro, use a propriedade Value, da seguinte forma:
Boa sorte.
Convert.ToDecimal(cmd.Parameters[@valorEstoque].Value);
Boa sorte.
GOSTEI 0
Anderson Bernardi..
13/04/2012
Desculpa, estava sem PC, não pude responder. Mas, funcionou, agora esta dando outro erro
(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!
(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!
GOSTEI 0
Allan Perez
13/04/2012
Tenta declarar a variável como nullable.
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
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
GOSTEI 0
Anderson Bernardi..
13/04/2012
Muito Obrigado mesmo gurizada! Agora está funcionando certinho o programa, Valeu mesmo!
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!
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!
GOSTEI 0