Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia meus amigos
estou com um seguinte problema, com o SQL Server 2005 e 2008 e VS 2008 com a tecnologia vb 9 .
tenho um campo datetime que nem sempre vai ser informada uma data, já passei os valores Null como que eu usava no vb6 com SQL Server 2000, DBNull.Value que é a nova maneira de passar o valor nulo para o banco de dados com vb9, so que ele da uma mensagem de erro que não é possível converte um valo varchar para datetime.
Se alguém puder me ajudar agradeço.
T+
Boa noite quintelab
Obrigado pela atenção, pois ja resolvi os problema.
Abaixo esta a função que uso para grava e editar dados no sql server.
Esta função ja esta funcionando perfeiotamente.
Function GravaNova(ByVal SqlCom As String, ByVal rs As Object, ByVal Campos As Object, ByVal Cod As Long, ByVal Dados As Object, Optional ByRef MostraMsg As Boolean = True, Optional ByRef Iguala As Object = Nothing, Optional ByRef IgualaA As Object = Nothing) As Boolean
Dim Bd As New SqlConnection, Comando As New SqlCommand, Ret&
Dim Cont As Long, rsE As String, rsV As String, Campo As String, SqlFinal As String = Nothing, SqlWhere As String = ""
For Cont = 0 To UBound(rs)
If Cod = 0 Then
rsE = rsE & IIf(Trim(rsE) = "", rs(Cont), "," & rs(Cont))
rsV = rsV & IIf(Trim(rsV) = "", "@" & rs(Cont), "," & "@" & rs(Cont))
SqlFinal = " (" & rsE & ") Values (" & rsV & " )"
ElseIf Cod > 0 Then
rsE = rsE & IIf(Trim(rsE) = "", rs(Cont) & "=@" & rs(Cont), "," & rs(Cont) & "=@" & rs(Cont))
SqlFinal = rsE
End If
Next
If Cod > 0 Then
If IsArray(Iguala) Then
Dim Conta As Long
For Conta = 0 To UBound(Iguala)
SqlWhere = SqlWhere & IIf(Trim(SqlWhere) = "", " Where " & Iguala(Conta) & "=@" & Iguala(Conta), " And " & Iguala(Conta) & "=@" & Iguala(Conta))
Next
End If
Else
End If
SqlFinal = SqlCom & SqlFinal & SqlWhere
Bd.ConnectionString = db.ConnectionString
Bd.Open()
Dim Cmd As New SqlCommand(SqlFinal, Bd)
'passando os valores a serem atrubuidos a os campos para serem atualizados
For Cont = 0 To UBound(rs)
If Dados(Cont) = "C" Or Dados(Cont) = "c" Then
Cmd.Parameters.Add("@" & rs(Cont), SqlDbType.Char).Value = Campos(Cont)
ElseIf Dados(Cont) = "N" Or Dados(Cont) = "n" Then
Cmd.Parameters.Add("@" & rs(Cont), SqlDbType.Float).Value = IIf(IsNumeric(Campos(Cont)), Campos(Cont), 0)
ElseIf Dados(Cont) = "D" Or Dados(Cont) = "d" Then
Cmd.Parameters.Add("@" & rs(Cont), SqlDbType.DateTime).Value = IIf(IsDate(Campos(Cont)), Campos(Cont), DBNull.Value)
ElseIf Dados(Cont) = "I" Or Dados(Cont) = "i" Then
Cmd.Parameters.Add("@" & rs(Cont), SqlDbType.Int).Value = IIf(IsNumeric(Campos(Cont)), Campos(Cont), 0)
ElseIf Dados(Cont) = "T" Or Dados(Cont) = "t" Then
Cmd.Parameters.Add("@" & rs(Cont), SqlDbType.Text).Value = Campos(Cont)
End If
Next
If Cod > 0 Then
'Passando valores para uma atualização Apos o Comando Where, com valores somente int
For Cont = 0 To UBound(Iguala)
Cmd.Parameters.Add("@" & Iguala(Cont), SqlDbType.Int).Value = IIf(IsNumeric(IgualaA(Cont)), IgualaA(Cont), 0)
Next
End If
Ret = Cmd.ExecuteNonQuery()
If Ret > 0 Then
GravaNova = True
Else
If MostraMsg = True Then
msg("Nem um registro foi cadastrado", MsgBoxStyle.Critical + MsgBoxStyle.ApplicationModal)
Else
GravaNova = True
End If
End If
Cmd.Clone()
End Function
Obrigado pela atenção
t+
Poste o código que utilizou.
Abraços...