PARAMETRO @DATE NO INSERT DO SQL SERVER

JCM0867 30/08/2016 00:22:01
#466266
Olá Pessoal,
Seguinte, tenho um campo date para inserir numa tabela.
Se estiver em branco salvar NULL se não salava a data em si

O que tem de errado aqui ou como devo escrever o código corretamente?

cdCheque.Parameters.AddWithValue([Ô]@CheDataCadastro[Ô], IIf(Trim(CStr(mskCheDataCadastro.Text)) = [Ô]/ /[Ô], [Ô]NULL[Ô], Format(CDate(mskCheDataCadastro.Text), [Ô]MM/dd/yyyy[Ô])))

Quando a data em Branco ele não reconhece:
Trim(CStr(mskCheDataCadastro.Text)) = [Ô]/ /[Ô] para salvar NULL
Diz que [Ô] / /[Ô] não é data

Grato
PAULOOLIVEIRA 30/08/2016 07:54:21
#466267
Ola, bom dia!!

Eu ja tive problema com data vazia ou nula no gravar... resolvi colocando o ? na definição da classe... exemplo:

private DateTime? dnasc;
public DateTime? Dnasc
{
get { return dnasc; }
set { dnasc = value; }
}

boa sorte!
PERCIFILHO 30/08/2016 08:36:41
#466269
Resposta escolhida
Experimentou trocar o [Ô]NULL[Ô] por DBNull.Value ?
JCM0867 30/08/2016 10:44:29
#466275
Olá,
Nenhuma das soluções funcionaram.
é em VB.net

Ele não reconhece data vazia
tem que retornar [txt-color=#0000f0]Trim(CStr(mskCheDataCadastro.Text)) = [Ô]/ /[Ô] [/txt-color]como verdadeiro para salvar Null

Por exempo se eu colocar
Trim(CStr(mskCheDataCadastro.Text)) = [Ô]01/02/2015[Ô] ele reconhece
NILSONTRES 30/08/2016 12:09:13
#466277
Se adata for vazia passe como nothing, ai fica assim:
MY_COMAND.Parameters.Add(New MySqlParameter([Ô]@Data_Cad[Ô], IIf(Me.Data_Cad = Nothing, System.DBNull.Value, Me.Data_Cad)))
Isso é mysql, mas deve ser igual.

A Palavra chave é essa: System.DBNull.Value
JCM0867 30/08/2016 12:52:35
#466279
Não deu, continua o mesmo erro
Em outras ocasiões eu coloquei uma data antiga
se for a data antiga, salva null, mas não acho que essa gambiarra seja uma maneira adequada

O que dá impressão é que ao invés de ele pegar a primeira opção do iif ele tenta pegar a segunda ocasionando o erro
FFCOUTO 30/08/2016 14:29:28
#466282
Configure a propriedade TextMaskFormat de seu MaskedTextBox para ExcludePromptAndLiterals, isso fará que qualquer caracter da máscara seja removido da propriedade texto quando não houver dados digitados.

Depois substitua o trecho
IIf(Trim(CStr(mskCheDataCadastro.Text)) = [Ô]/  /[Ô], [Ô]NULL[Ô], Format(CDate(mskCheDataCadastro.Text), [Ô]MM/dd/yyyy[Ô])))

por
IIf(String.IsNullOrWhiteSpace(mskCheDataCadastro.Text), DBNull.Value, Format(CDate(mskCheDataCadastro.Text), [Ô]MM/dd/yyyy[Ô]))


PERCIFILHO 30/08/2016 15:19:48
#466284
Se ainda assim não funcionar, tenta separar as ações do If , ao invés de utilizar o IIf, talvez funcione.

If(Trim(CStr(mskCheDataCadastro.Text)) = [Ô]/ /[Ô] Then
cdCheque.Parameters.AddWithValue([Ô]@CheDataCadastro[Ô], DbNull.Value)
Else
cdCheque.Parameters.AddWithValue([Ô]@CheDataCadastro[Ô], Format(CDate(mskCheDataCadastro.Text), [Ô]MM/dd/yyyy[Ô]))
End If
NILSONTRES 30/08/2016 15:39:12
#466287
Vc esta passando // ao invés de nothing
PERCIFILHO 30/08/2016 15:57:01
#466289
Eu, particularmente, prefiro usar a função IsDate() para verificar se o MaskedTextBox contém uma data válida:
Exemplo:
If Not IsDate(mskCheDataCadastro.Text) Then
cdCheque.Parameters.AddWithValue([Ô]@CheDataCadastro[Ô], DbNull.Value) .....

Mas, creio que o modo como o FFCOUTO passou deve funcionar.
DAMASCENO.CESAR 30/08/2016 16:04:05
#466290
Geralmente faço a verificação como o PERCIFILHO e roda legal
Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas