Erro SQL 2812

13/04/2012

0

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!
Anderson Bernardi..

Anderson Bernardi..

Responder

Posts

14/04/2012

Joel Rodrigues

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.
Responder

14/04/2012

Anderson Bernardi..

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!
Responder

15/04/2012

Joel Rodrigues

Para recuperar o valor do parâmetro, use a propriedade Value, da seguinte forma:
Convert.ToDecimal(cmd.Parameters[@valorEstoque].Value);

Boa sorte.
Responder

20/05/2012

Anderson Bernardi..

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!
Responder

21/05/2012

Allan Perez

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
Responder

21/05/2012

Anderson Bernardi..

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!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar