Usuário com melhor resposta
Problemas com Inserção no banco

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?
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
-
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
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() -
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
-
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
-
-
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. -
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
- Editado Antero Marques segunda-feira, 21 de março de 2016 13:43
-