Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nilson Cl.

[Resolvido] Erro ao cadastrar uma data nula no sql server 2005 e

Recommended Posts

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+

Compartilhar este post


Link para o post
Compartilhar em outros sites

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+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.