Pues yo acostumbro a utilizar los SqlParameters para que el command no me ponga lio con los tipo de datos, algo como este emplo que busque en internet.
Código Vb.Net:
Ver originalPrivate Sub Guardar_cambios_Click(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles BtnGuardar_cambios.Click
'guardamos los cambios realizados
Dim sqlcadena As String
sqlcadena = New String("update vendedores set nombres=@nombres,apellidos=@apellidos," + _
"dirección=@dirección,e_civil=@civil,sexo=@sexo, sueldo=@sueldo,retirado=@retirado where codigo=@codigo")
Dim ocmd As New SqlCommand
ocmd.Parameters.Add(New SqlParameter("@codigo", SqlDbType.Int)).Value = CboCodigo.Text
ocmd.Parameters.Add(New SqlParameter("@nombres", SqlDbType.Text, 25)).Value = Txtnom.Text.ToString
ocmd.Parameters.Add(New SqlParameter("@apellidos", SqlDbType.Text, 25)).Value = Txtapel.Text.ToString
ocmd.Parameters.Add(New SqlParameter("@dirección", SqlDbType.VarChar, 60)).Value = Txtdir.Text
ocmd.Parameters.Add(New SqlParameter("@sueldo", SqlDbType.Decimal)).Value = Txtsueldo.Text
Select Case CboCivil.Text
Case Is = "Casado"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "C"
Case Is = "Soltero"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "S"
Case Is = "Viudo"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "V"
Case Is = "Divorciado"
ocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "D"
End Select
If CboSexo.Text = "Masculino" Then
ocmd.Parameters.Add("@sexo", SqlDbType.Int, 1).Value = 1
ElseIf CboSexo.Text = "Femenino" Then
ocmd.Parameters.Add("@sexo", SqlDbType.Int, 1).Value = 0
End If
If chkRetirado.Checked = True Then
ocmd.Parameters.Add("@retirado", SqlDbType.Bit, 1).Value = chkRetirado.Checked
ElseIf chkRetirado.Checked = False Then
ocmd.Parameters.Add("@retirado", SqlDbType.Bit, 1).Value = chkRetirado.Checked
End If
conection.Open()
ocmd.CommandText = sqlcadena
ocmd.Connection = conection
ocmd.ExecuteNonQuery()
End Sub
Como puedes ver, en la linea
Código Vb.Net:
Ver originalocmd.Parameters.Add("@civil", SqlDbType.Char, 1).Value = "V"
Se esta especificando el tipo del dato y el tamaño, para el tipo Fecha seria algo como esto:
Código Vb.Net:
Ver originalocmd.Parameters.Add("@fecha", SqlDbType.DateTime).Value = miFecha
Ya que el tamaño no aplica para este tipo de dato.
Si tienes algún inconveniente para entender todo el código me comentas.
Todo el codigo del ejemplo
aqui
Saludos