SQL日期时间转换为字符串格式
我有一些代码声明了一个对象变量,这个变量从现有的数据库字段中分配了一个值SQL日期时间转换为字符串格式,sql,database,vb.net,datetime,insert,Sql,Database,Vb.net,Datetime,Insert,我有一些代码声明了一个对象变量,这个变量从现有的数据库字段中分配了一个值 Dim datestart As Object datestart = dbToDate(dr("DateStart")) 然后将变量传递给一个函数,该函数检查该变量是否为null,然后将其转换为datetime数据类型 Public Shared Function dbToDate(o As Object) As DateTime If o Is DBNull.Value Then
Dim datestart As Object
datestart = dbToDate(dr("DateStart"))
然后将变量传递给一个函数,该函数检查该变量是否为null,然后将其转换为datetime数据类型
Public Shared Function dbToDate(o As Object) As DateTime
If o Is DBNull.Value Then
Return Nothing
Else
Return Convert.ToDateTime(o)
End If
End Function
我需要做的最后一件事是将其转换为日期格式的字符串DD/MM/YYYY,以便将其插入新数据库
到目前为止,我的功能是
Public Shared Function sqlDate(dt As DateTime) As String
Return "'" & Format(dt, "yyyyMMdd") & "'"
End Function
但是,当我运行代码时,我得到以下错误消息
将varchar数据类型转换为datetime数据类型导致值超出范围
这是为什么?我如何修复它?简单地说,您可以使用
toString
函数。还要检查你的时区。问题可能出在时区设置中
希望您将日期作为字符串传递给数据库,请尝试将日期作为Datetime变量而不是字符串传递
Public Shared Function sqlDate(dt As DateTime) As String
Return dt.toString("yyyy-MM-dd")
End Function
对于您的Ref:检查表中DateStart列的值。一行或多行包含的值超出了为c#DateTime类型指定的范围。@TheShooter这是vb.net,不是c#抱歉,我忘了注意语言,但语言与此无关。所有.net语言的基础数据类型都相同。在datestart=dbToDate(dr(“datestart”)语句上放置一个断点,检查dr(“datestart”)的值,看看它是否位于DateTime.Mix和DateTime.Max之间。或者记下DateTime.Min和DateTime.Max的值,然后在sql表中查找值超出此范围的行。@TheShooter值为3/1/2014Ypu可能不需要将
DateTime
转换为字符串,而是查看查询的参数化。对不起,Sankar,我的错误,这是因为我在字符串的末尾添加了hhmmss tt。但是,我的一个日期为null,在名为dbToDate的函数中(请参见问题),它没有返回“Nothing”,而是返回12:00:00AM,因此此函数无法将其插入数据库。我怎样才能让它和这些一起工作?@joe,所以你把时间和日期连接起来了。对吗?我希望值只是一个日期。在数据库中,有4个日期时间。3表示没有时间的日期,4表示没有日期的时间。1日期和时间字段允许为空。对于“时间”字段,它可以正常工作,因为它被转换为“无”。但是,空日期转换为时间,这会导致问题