Array
(
)

Erro SQL 2812

Anderson Bernardi..
   - 13 abr 2012

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!

Joel Rodrigues
   - 14 abr 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.

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

Joel Rodrigues
   - 15 abr 2012

Para recuperar o valor do parâmetro, use a propriedade Value, da seguinte forma:
#Código

Convert.ToDecimal(cmd.Parameters[@valorEstoque].Value);

Boa sorte.

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

Allan
   - 21 mai 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

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