Inquiridor
Erro com SQL Parameter

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
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 -
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
-
-
-
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/dw70f090.aspx
Abraços e espero ter ajudado!
Estudar, Estudar e Estudar! Não existe caminho curto.