none
Problemas com Inserção no banco RRS feed

  • Pergunta

  • Boa tarde, tudo bem?

    Eu tenho a seguinte função para adicionar bastante dados em uma tabela (Asp.net):

     Dim connection As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString)
            Dim MySQL As String = "INSERT INTO Nomes (NOME_1,NOME_2,ENDERECO) values (@NOME_1, @NOME_2, @ENDERECO)"
    
     Dim cmd As New SqlCommand(MySQL, connection)
    
    cmd.Parameters.Add(New SqlParameter("@NOME_1", txt_NOME_1.Value))
            cmd.Parameters.Add(New SqlParameter("@NOME_2", txt_NOME_2.value))
            cmd.Parameters.Add(New SqlParameter("@ENDERECO", txt_Endereco.Value))
    
     connection.Open()
     cmd.ExecuteNonQuery()

    Só que na linha

    cmd.ExecuteNonQuery()

    Acontece um erro.

    "The parameterized query '(@NOME_1 nvarchar(13),@NOME_2 nvarchar(28)' expects the parameter '@ENDERECO', which was not supplied."

    Ou seja, se eu preencho todos os dados, funciona. Mas, se eu deixo algum dos campos sem preencher o erro acontece. É como se ao ler o valor do text, ele considerasse nenhum valor e a variável não é reconhecida como preenchida.

    Alguém pode me dar essa ajuda?

    sábado, 19 de março de 2016 20:40

Respostas

  • Você precisa apenas de um tratamento para valores nulos.

    sqlCommand.Parameters.Add("NOME_1", SqlDbType.VarChar, 80).Value = if(txt_NOME_1.Text, Convert.DBNull)

    Att,


    Antero Marques


    • Editado Antero Marques sábado, 19 de março de 2016 22:16
    • Marcado como Resposta Marcos SJ segunda-feira, 21 de março de 2016 13:15
    • Não Marcado como Resposta Marcos SJ segunda-feira, 21 de março de 2016 13:15
    • Marcado como Resposta Paulo.Sérgio terça-feira, 22 de março de 2016 19:46
    sábado, 19 de março de 2016 22:14
  • Bom dia,

    Basta que no SQL você predefina esse campo como nulo, para que ele seja capaz de aceitar o mesmo.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ segunda-feira, 21 de março de 2016 13:15
    segunda-feira, 21 de março de 2016 13:10

Todas as Respostas

  • Abra primeiro a conexão depois encapsule a mesma no command.

    Dim connection As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString)
    connection.Open()       
    Dim MySQL As String = "INSERT INTO Nomes (NOME_1,NOME_2,ENDERECO) values (@NOME_1, @NOME_2, @ENDERECO)"
    Dim cmd As New SqlCommand(MySQL, connection)

    'Altere de:  cmd.Parameters.Add

    'Para: cmd.Parameters.AddWithValue

    cmd.Parameters.AddWithValue(New SqlParameter("@NOME_1", txt_NOME_1.Value))
    cmd.Parameters.AddWithValue(New SqlParameter("@NOME_2", txt_NOME_2.value))
    cmd.Parameters.AddWithValue(New SqlParameter("@ENDERECO", txt_Endereco.Value))
    cmd.ExecuteNonQuery()
    connection.Close()

    sábado, 19 de março de 2016 21:57
  • Você precisa apenas de um tratamento para valores nulos.

    sqlCommand.Parameters.Add("NOME_1", SqlDbType.VarChar, 80).Value = if(txt_NOME_1.Text, Convert.DBNull)

    Att,


    Antero Marques


    • Editado Antero Marques sábado, 19 de março de 2016 22:16
    • Marcado como Resposta Marcos SJ segunda-feira, 21 de março de 2016 13:15
    • Não Marcado como Resposta Marcos SJ segunda-feira, 21 de março de 2016 13:15
    • Marcado como Resposta Paulo.Sérgio terça-feira, 22 de março de 2016 19:46
    sábado, 19 de março de 2016 22:14
  • Bom dia,

    Basta que no SQL você predefina esse campo como nulo, para que ele seja capaz de aceitar o mesmo.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Marcado como Resposta Marcos SJ segunda-feira, 21 de março de 2016 13:15
    segunda-feira, 21 de março de 2016 13:10
  • O problema não é no SQL, é na parametrização do comando SQL na aplicação.

    É fácil de simular, basta passar um parâmetro para o banco, sem valor e sem conversão para DBNull.

    Att,


    Antero Marques

    segunda-feira, 21 de março de 2016 13:36
  • Isso não deve ser tratado a nível de aplicação.

    Valores nulos, devem ser sempre especificados na arquitetura do banco de dados.


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 21 de março de 2016 13:39
  • Roberto,

    acho que você não entendeu, ele está apenas passando um parâmetro opcional para o banco, mas não está fazendo o tratamento na aplicação. O campo na tabela já aceita nulo.

    Veja a mensagem de erro:

    The parameterized query '(@NOME_1 nvarchar(13),@NOME_2 nvarchar(28)' expects the parameter '@ENDERECO', which was not supplied.


    Antero Marques


    segunda-feira, 21 de março de 2016 13:43
  • Era realmente isso, eu meio que suspeitava...

    Valeu pela ajuda!

    terça-feira, 22 de março de 2016 19:46