none
Erro: Must declare the scalar variable RRS feed

  • Pergunta

  • Beleza pessoal?

    Sou um novato e, portanto, não tenho muito conhecimento em programação.

    Está aparecendo um erro quando tento inserir dados na tabela conforme código abaixo:

    Imports System.Data.SqlClient
    Imports System.Data
    Imports System

    Public Class frmcadastro

        Dim comando As SqlCommand
        Dim conexao As SqlConnection
        Dim inserir As String

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdcadastrar.Click
            inserir = "INSERT INTO cadastro (Nome, Usuário, Telefone, Unidade, Sala, Senha, Repsenha, Email) VALUES (@NomeTextBox.Text, @UsuarioTextBox.Text, @TelefoneMaskedTextBox.Text, @UnidadeComboBox.Text, @SalaTextBox.Text, @SenhaTextBox.Text, @RepsenhaTextBox.Text, @EmailTextBox.Text)"
            conexao = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\entrar.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
            conexao.Open()
            comando = New SqlCommand(inserir, conexao)
            comando.ExecuteNonQuery()
            conexao.Close()
            MessageBox.Show("Cadastro realizado com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Sub

    O erro é: Must declare the scalar variable @NomeTextBox.Text

    Já procurei no fórum e não achei nada que resolvesse meu problema. Onde está o erro?

    Se alguém puder ajudar ficaria muito agradecido

    quinta-feira, 29 de dezembro de 2011 01:49

Respostas

  • Olá,Herbert!

    O erro é que você tem que adicionar os parâmetros depois:

     inserir = "INSERT INTO cadastro (Nome, Usuário, Telefone, Unidade, Sala, Senha, Repsenha, Email) VALUES (@nome,@usuario,@fone,@unidade,@sala,@senha,@repsenha,@email) ;"

    E depois:

    comando.Parameters.AddWithValue("@nome",NomeTextBox.Text)
    

    etc.

    Para cada um dos parâmetros.

    quinta-feira, 29 de dezembro de 2011 03:15

Todas as Respostas

  • Olá,Herbert!

    O erro é que você tem que adicionar os parâmetros depois:

     inserir = "INSERT INTO cadastro (Nome, Usuário, Telefone, Unidade, Sala, Senha, Repsenha, Email) VALUES (@nome,@usuario,@fone,@unidade,@sala,@senha,@repsenha,@email) ;"

    E depois:

    comando.Parameters.AddWithValue("@nome",NomeTextBox.Text)
    

    etc.

    Para cada um dos parâmetros.

    quinta-feira, 29 de dezembro de 2011 03:15
  • Cara valeu mesmo, agora funcionou. O programa roda todo, inclusive aparece a mensagem de cadastro realizado com sucesso conforme código acima.

    Agora surgiu outro problema, quando faço um select no sql server não aparece dado nenhum inserido pelo programa. O programa roda direitinho mas não grava no banco. Será que to fazendo algo errado?

    Mais uma ajuda, poderia me fornecer algum código de tratamente de erro para caso já exista um usuário cadastrado e também se as duas senhas inseridas são iguais?

    Cara, desculpa tanta pergunta mas é que sou novato e to muito empolgado. rsrsrsr

    Valeu mesmo e um grande abraço.

    Vai aí o código todo.

    Public Class frmcadastro

        Dim comando As SqlCommand
        Dim conexao As SqlConnection
        Dim senha2 As String
        Dim senha1 As String
        Dim inserir As String
        Dim visualizar As String

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            inserir = "INSERT INTO cadastrousuario (Nome, Usuario, Telefone, Unidade, Sala, Senha, Repsenha, Email) VALUES (@Nome, @Usuario, @Telefone, @Unidade, @Sala, @Senha, @Repsenha, @Email)"
            conexao = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\cadastrousuario.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
            conexao.Open()
            comando = New SqlCommand(inserir, conexao)
            comando.Parameters.AddWithValue("@Nome", NomeTextBox.Text)
            comando.Parameters.AddWithValue("@Usuario", UsuarioTextBox.Text)
            comando.Parameters.AddWithValue("@Telefone", TelefoneMaskedTextBox.Text)
            comando.Parameters.AddWithValue("@Unidade", UnidadeComboBox.Text)
            comando.Parameters.AddWithValue("@Sala", SalaTextBox.Text)
            comando.Parameters.AddWithValue("@Senha", SenhaTextBox.Text)
            comando.Parameters.AddWithValue("@Repsenha", RepsenhaTextBox.Text)
            comando.Parameters.AddWithValue("@email", EmailTextBox.Text)
            comando.ExecuteNonQuery()
            conexao.Close()
            MessageBox.Show("Cadastro realizado com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Close()
            frmentrar.Show()
        End Sub

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            NomeTextBox.Text = ""
            EmailTextBox.Text = ""
            UnidadeComboBox.Text = ""
            SalaTextBox.Text = ""
            TelefoneMaskedTextBox.Text = ""
            UsuarioTextBox.Text = ""
            SenhaTextBox.Text = ""
            RepsenhaTextBox.Text = ""
            NomeTextBox.Focus()
        End Sub

        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            If MessageBox.Show("Deseja realmente sair?", "Sair", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                End
            End If
        End Sub
    End Class


    sexta-feira, 30 de dezembro de 2011 22:28
  • Antes de voce cadastrar vais ter de fazer um select from tabela where senha = senha and password = password.

     


    One word frees us of all the weight and pain of life: that word is love.
    sexta-feira, 30 de dezembro de 2011 22:54
    Moderador
  • Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Dim str As String = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Levi\Documents\Database_Desenvolvimento.accdb")
            Dim conecao As OleDbConnection = New OleDbConnection(str)
            Dim comando As OleDbCommand = New OleDbCommand()
            comando.CommandText = "Select * From Table_Informacao Where Nome =?"
            comando.CommandType = CommandType.Text
            comando.Connection = conecao
            comando.Parameters.AddWithValue("@Nome", Me.TextBox1.Text)
            Try
                conecao.Open()
                Dim adapter As OleDbDataAdapter = New OleDbDataAdapter()
                adapter.SelectCommand = comando
                Dim tabela As DataSet = New DataSet()
                adapter.Fill(tabela)
                If tabela.Tables(0).Rows.Count > 0 Then
                    MessageBox.Show("o resgisto que vce quer gravar ja existe na tabela, por favor escolhe um novo nome", "Informacao")
                    conecao.Close()
                    adapter.Dispose()
                Else
                    conecao.Close()
                    comando = New OleDbCommand()
                    comando.CommandText = "INSERT INTO Table_Informacao Values(?,?,?,?,?)"
                    comando.CommandType = CommandType.Text
                    comando.Connection = conecao
                    comando.Parameters.AddWithValue("?", 37)
                    comando.Parameters.AddWithValue("@Nome", "TextBox1")
                    comando.Parameters.AddWithValue("@SobreNome", "Ruth")
                    comando.Parameters.AddWithValue("@Telefone", 30000)
                    comando.Parameters.AddWithValue("@Validar", 1)
                    Try
                        conecao.Open()
                        adapter = New OleDbDataAdapter()
                        adapter.InsertCommand = comando
                        Dim resultado As Integer = comando.ExecuteNonQuery()
                        MessageBox.Show("Sua informacao, foi gravada com sucesso", "Informacao" + resultado.ToString)
                        conecao.Close()
                    Catch ex As Exception
                        Throw ex
                    End Try
                End If
            Catch ex As Exception
                Throw ex
            End Try
        End Sub

    One word frees us of all the weight and pain of life: that word is love.
    sexta-feira, 30 de dezembro de 2011 22:56
    Moderador
  • Valeu pela ajuda nos tratamentos de erros.

    Mas ainda continuo com o problema de não gravar no banco de dados.

    Alguém pra me ajudar?

    sábado, 31 de dezembro de 2011 00:41
  • qual e problema de nao gravar?

     


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 31 de dezembro de 2011 13:56
    Moderador
  • O programa roda direitinho, mostra a mensagem de que a cadastro foi realizado com sucesso mas quando vc faz um select no banco não tem dado nenhum, ou seja, não foi gravado.
    sábado, 31 de dezembro de 2011 14:00
  • O programa roda direitinho, mostra a mensagem de que a cadastro foi realizado com sucesso mas quando vc faz um select no banco não tem dado nenhum, ou seja, não foi gravado.

    usa try catch. ai vai mostrar onde o erro acontece...

    eu nao vi isto no teu codigo   adapter.InsertCommand = comando?


    One word frees us of all the weight and pain of life: that word is love.
    sábado, 31 de dezembro de 2011 20:29
    Moderador
  • Cara, como eu já disse sou novato em programação então não sei muito como usar o try catch. Poderia me passar um adaptado ao meu código?

    Cara valeu mesmo pela sua ajuda.

    Grande abraço.

    domingo, 1 de janeiro de 2012 23:56
  • no codigo k eu postei tem try catch
    One word frees us of all the weight and pain of life: that word is love.
    domingo, 1 de janeiro de 2012 23:58
    Moderador
  • Cara, fiz alguns testes e percebi que o problema ta na instrução

    inserir = "INSERT INTO cadastro (Nome, Usuário, Telefone, Unidade, Sala, Senha, Repsenha, Email) VALUES (@NomeTextBox.Text, @UsuarioTextBox.Text, @TelefoneMaskedTextBox.Text, @UnidadeComboBox.Text, @SalaTextBox.Text, @SenhaTextBox.Text, @RepsenhaTextBox.Text, @EmailTextBox.Text)"

     

    Não sei se o problema tá com os apostrofos simples e duplos, mas quando coloquei dentro do sql a instrução '@Nome' com apostrofos simples funcionou, mas dentro do codigo não funciona.

     

    • Marcado como Resposta Herbert Freitas terça-feira, 3 de janeiro de 2012 03:57
    • Não Marcado como Resposta Herbert Freitas terça-feira, 3 de janeiro de 2012 03:57
    segunda-feira, 2 de janeiro de 2012 02:50
  • Bom pessoal vou dar esse tópico como resolvido pois o assunto inicial dele já foi resolvido, vou abrir outro tópico mais conveniente para a dúvido que continuou.

    Obrigado pela ajuda de todos.

    terça-feira, 3 de janeiro de 2012 03:56