none
Erro com SQL Parameter RRS feed

  • Pergunta

  • Bom, segue o código de meu projeto: 
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    
    public partial class Cadastro : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
            lbl1.Text = "Processo...";
    
        }
        protected void click1(object sender, EventArgs e)
        {
    
            SqlConnection conn = new SqlConnection("Initial Catalog=SpaceBook;Data Source=ANDRÉ-PC\\DEDE;Integrated Security=SSPI");
    
            try
            {
    
                conn.Open();
    
                string contar = "SELECT count(*) FROM usuarios WHERE usuario = '{0}'";
    
                SqlCommand command = new SqlCommand(string.Format(contar, txtUser.Text),conn);
    
                object Result = command.ExecuteScalar();
    
    
                   if (int.Parse(Result.ToString()) == 0 && txtSenha.Text == txtSenha2.Text)
                   {   
    
                 string inserir = "INSERT INTO usuarios VALUES (@usuario, @senha, @nome, @email, @sobrenome, @endereco, @complemento, @bairro, @cidade, @estado, @numero, @cpf, @rg)";
                      
                 SqlCommand insert = new SqlCommand(string.Format(inserir), conn);
    
    
                 SqlParameter[] param = new SqlParameter[12];
                 param[0].ParameterName = "@usuario";
                 param[0].Value = txtUser.Text;
                 param[1].ParameterName = "@senha";
                 param[1].Value = txtSenha.Text;
                 param[2].ParameterName = "@email";
                 param[2].Value = txtEmail.Text;
                 param[3].ParameterName = "@sobrenome";
                 param[3].Value = txtSobrenome.Text;
                 param[4].ParameterName = "@endereco";
                 param[4].Value = txtEndereco.Text;
                 param[5].ParameterName = "@complemento";
                 param[5].Value = txtComplemento.Text;
                 param[6].ParameterName = "@bairro";
                 param[6].Value = txtBairro.Text;
                 param[7].ParameterName = "@cidade";
                 param[7].Value = txtCidade.Text;
                 param[8].ParameterName = "@estado";
                 param[8].Value = dropEstados.SelectedValue;
                 param[9].ParameterName = "@numero";
                 param[9].Value = txtNumero.Text;
                 param[10].ParameterName = "@cpf";
                 param[10].Value = txtCPF.Text + txtDigitosCPF.Text;
                 param[11].ParameterName = "@rg";
                 param[11].Value = txtRG.Text + txtDigitoRG.Text;
    
                 insert.Parameters.Add(param);
    
                 insert.ExecuteNonQuery();
    
                 lbl1.Text = "Usuário cadastrado com sucesso!";
    
                 ApagaCampos();
                
    
    
        
                }
                else
                {
    
    
                    lbl1.Text = "Ocorreu um erro em seu cadastro!";
                    ApagaCampos();
    
                }
    
            }
            catch (SqlException ex)
            {
    
                lblError.Text = ex.Message;
    
            }
            finally
            {
    
                conn.Close();
    
            }
    
            }
    
        void ApagaCampos()
        {
    
            txtUser.Text = string.Empty;
            txtSenha.Text = string.Empty;
            txtSenha2.Text = string.Empty;
            txtEmail.Text = string.Empty;
            txtNome.Text = string.Empty;
            txtSobrenome.Text = string.Empty;
            txtCPF.Text = string.Empty;
            txtDigitosCPF.Text = string.Empty;
            txtRG.Text = string.Empty;
            txtDigitoRG.Text = string.Empty;
            txtEndereco.Text = string.Empty;
            txtNumero.Text = string.Empty;
            txtComplemento.Text = string.Empty;
            txtBairro.Text = string.Empty;
            txtCidade.Text = string.Empty;
    
    
        }
    }
    

    E ocorre um erro em meu SqlParameter dizendo: "Object reference not set to an instance of an object"

    ~ Obrigado

     

    quarta-feira, 28 de setembro de 2011 22:42

Todas as Respostas

  • Boa noite André...

    Tenta muda nas instancias do SqlParamter:

    SqlCommand insert = new SqlCommand(string.Format(inserir), conn);
    
    
                SqlParameter[] param = new SqlParameter[12];
                param[0] = new SqlParameter("@usuario",txtUser.Text);
                param[1] = new SqlParameter("@senha", txtSenha.Text);
                param[2]  = new SqlParameter("@email",txtEmail.Text);
                param[3] = new SqlParameter("@sobrenome",txtSobrenome.Text);
                param[4] = new SqlParameter("@endereco",txtEndereco.Text);
                param[5] = new SqlParameter("@complemento",txtComplemento.Text);
                param[6] = new SqlParameter("@bairro", txtBairro.Text);
                param[7] = new SqlParameter("@cidade",txtCidade.Text);
                param[8] = new SqlParameter("@estado",dropEstados.SelectedValue);
                param[9] = new SqlParameter("@numero",txtNumero.Text);
                param[10] = new SqlParameter("@cpf",txtCPF.Text + txtDigitosCPF.Text);
                param[11] = new SqlParameter("@rg",txtRG.Text + txtDigitoRG.Text);
    
                insert.Parameters.Add(param);
    
                insert.ExecuteNonQuery();
    

    Espero ter ajudado.....


    Eder dos Santos Silva Analista Programador Pleno Portfólio: http://www.ederssilva.com.br
    quinta-feira, 29 de setembro de 2011 01:51
  • Agora coloquei este seu código e o erro que aparece é:

    The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter[] objects.
    (Erro relacionado ao "insert.Parameters.Add(param)")

    • Editado André .NET quinta-feira, 29 de setembro de 2011 15:00
    quinta-feira, 29 de setembro de 2011 14:58
  • O certo é chamar o metodo AddRange

     

    insert.Parameters.AddRange(param);

    quinta-feira, 29 de setembro de 2011 15:14
  • Tenta Fazer da Seguinte forma:

    insert.Parameters.AddRange(param);

    Pois O SqlParameter é uma coleção se SqlParameter...


    Eder dos Santos Silva Analista Programador Pleno Portfólio: http://www.ederssilva.com.br
    quinta-feira, 29 de setembro de 2011 15:16
  • André só para complementar... vou  postar um método de inserir de um exemplo que tenho aqui onde passo os parâmetros só que usando o AddWithValue segue o código:

     

     public static bool Inserir(ClienteModel Obj)
            {
                SqlConnection conn = UtilDB.ObterConexao();
                StringBuilder sql = new StringBuilder();
                sql.Append("INSERT INTO Cliente (Nome, Rua, Numero, Bairro, IdCidade, IdEstado, DataNascimento, Email, Telefone, Ativo) ");
                sql.Append("VALUES (@Nome, @Rua, @Numero, @Bairro, @IdCidade, @IdEstado, @DataNascimento, @Email, @Telefone, @Ativo) ");
                SqlCommand cmd = new SqlCommand(sql.ToString(), conn);
                //Aqui preencho os parâmetros do comando sql
                //veja que utilizo o addwithvalue
                cmd.Parameters.AddWithValue("@Nome", Obj.Nome);
                cmd.Parameters.AddWithValue("@Rua", Obj.Rua);
                cmd.Parameters.AddWithValue("@Numero", Obj.Numero);
                cmd.Parameters.AddWithValue("@Bairro", Obj.Bairro);
                cmd.Parameters.AddWithValue("@IdCidade", Obj.Cidade.Id);
                cmd.Parameters.AddWithValue("@IdEstado", Obj.Estado.Id);
                cmd.Parameters.AddWithValue("@DataNascimento", Obj.DataNascimento);
                cmd.Parameters.AddWithValue("@Email", Obj.Email);
                cmd.Parameters.AddWithValue("@Telefone", Obj.Telefone);
                cmd.Parameters.AddWithValue("@Ativo", Obj.Ativo);
                int afetados = -1;
                try
                {
                    conn.Open();
                    afetados = cmd.ExecuteNonQuery();
                }
                catch
                {
                }
                finally
                {
                    conn.Close();
                }
                return (afetados > 0);
            }
    

     

    Segue alguns links de refência:

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

    http://msdn.microsoft.com/en-us/library/dw70f090.aspx

    http://programandodotnet.wordpress.com/2010/04/03/cadastro-de-clientes-em-c-usando-conceitos-de-ado-net-%E2%80%93-parte-1/

     

    Abraços e espero ter ajudado!


    Estudar, Estudar e Estudar! Não existe caminho curto.
    sábado, 1 de outubro de 2011 17:12