Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Como salvar data nula usando o PreparedStatement / setPara


BStar

Pergunta

Olá a todos.

Estou com um problema aqui que está me deixando de cabelos em pé :S

Bem, eu, para salvar os dados de um formulário no meu banco da dados (Access), uso uma classe para os meus objetos e passo os valores para a query através do setParameter dessa forma:

Dim baseQuery As String = "insert into MUDANCA (ID_AUDITORIA, DATA_ENTRADA)values (?, '?')"
 Dim query As PreparedStatement = New PreparedStatement(baseQuery)
 query.setParameter(0, mudanca.idAuditoria)
 query.setParameter(1, mudanca.dataEntrada)
 executeUpdate(query.getStatement()) 'executo minha query

Bem, a variável idAuditoria é do tipo Integer, e sempre terá um número inteiro.

A variável dataEntrada é do tipo String que eu formato antes de salvar no banco que possui a coluna do tipo Data/Hora e, hora possui um valor(dd/mm/yyy), hora não (nula ou branco)...

Gostaria de saber de 3 coisas:

Como faço para passar um valor nulo para a variável "dataEntrada" para salvar no banco;

Como faço para mudar na minha query de '?' para ? uma vez que não consigo salvar NULL (string) no campo data por conta das ' ' (aspas simples, apóstrofe) mas se não tiver as aspas, quando a variável contiver uma data, eu não conseguirei salvar :(

E se a declaração da minha variável está correta... Tipo, eu declaro ela como String, passo para um formato de Data que eu queira e faço meu insert como Data/Hora.

(Vb.Net / VS2008 / Asp.Net)

Agradeço desde já!

Editado por BStar
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Você terá que validar isso no momento que monta sua string. Acho que assim deve funcionar:

Dim baseQuery As String = "insert into MUDANCA (ID_AUDITORIA, DATA_ENTRADA)values (?, ?)"
Dim query As PreparedStatement = New PreparedStatement(baseQuery)
query.setParameter(0, mudanca.idAuditoria)

if(mudanca.dataEntrada TEM ALGUM VALOR) then
       query.setParameter(1, string.format("'{0}'", mudanca.dataEntrada))
else
       query.setParameter(1, mudanca.dataEntrada)
end if
executeUpdate(query.getStatement()) 'executo minha query

Abraços...

Link para o comentário
Compartilhar em outros sites

  • 0
Você terá que validar isso no momento que monta sua string. Acho que assim deve funcionar:

Dim baseQuery As String = "insert into MUDANCA (ID_AUDITORIA, DATA_ENTRADA)values (?, ?)"
Dim query As PreparedStatement = New PreparedStatement(baseQuery)
query.setParameter(0, mudanca.idAuditoria)

if(mudanca.dataEntrada TEM ALGUM VALOR) then
       query.setParameter(1, string.format("'{0}'", mudanca.dataEntrada))
else
       query.setParameter(1, mudanca.dataEntrada)
end if
executeUpdate(query.getStatement()) 'executo minha query

Abraços...

E a minha variável (mudanca.dataEntrada)? Como declaro ela? String mesmo?

Porque no "else" você está passando a mudanca.dataEntrada como String e no "values" está sem aspas :s . É assim mesmo?

No "else" eu atribuo o valor da minha variável como "nothing" (String) ou null (como outra coisa) ?

Se eu fizer: "insert into tabela (cod, data) values (10, null)", funciona

Se eu fizer: "insert into tabela (cod, data) values (10, 'null') ou "insert into tabela (cod, data) values (10, 'nothing') não funciona :(

Obrigado por ajudar mais uma vez!

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

Sim, o que eu quero saber é: Como passar o Null sem as aspas pelo vb.net? Não sei como passar um texto (no caso null) sem que ele seja do tipo String. Se ele é string, precisa de aspas. Tem algum modo?

O Access só aceita null se eu fizer direto no banco ou de outra forma (sem as aspas) tipo:

insert into tabela (data) values (null)

Assim funciona, mas como eu disse, isso é na unha... Pela aplicação eu não consigo fazer isso de forma alguma :(

Link para o comentário
Compartilhar em outros sites

  • 0
Sim, o que eu quero saber é: Como passar o Null sem as aspas pelo vb.net? Não sei como passar um texto (no caso null) sem que ele seja do tipo String. Se ele é string, precisa de aspas. Tem algum modo?

O Access só aceita null se eu fizer direto no banco ou de outra forma (sem as aspas) tipo:

insert into tabela (data) values (null)
Assim funciona, mas como eu disse, isso é na unha... Pela aplicação eu não consigo fazer isso de forma alguma :(
Então quintelab, depois de chegar a página de número 1.000.000 de pesquisa do google, achei uma página daqui mesmo que, inclusive a resposta é sua informando para um usuário passar o texto "null" com aspas mesmo e no set parameter deixar sem aspas. Fiz isso agora e funcionou perfeitamente. Estudando o código que me passou, ficou assim:
"insert into tabela (codigo, data) values (?,?)"
        query.setParameter(0, mudancaAcomod.Id)
        query.setParameter(1, IIf(mudancaAcomod.dataSaida = "", "null", String.Format("'{0}'", mudancaAcomod.dataEntrada)))

Valeu mesmo por ajudar!

(Ps: Quando chegar em casa eu coloco o link da página porque achei ontem a noite e não consegui achar agora de novo :()

Editado por BStar
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...