【问题标题】:SQL datetime to string formatSQL日期时间到字符串格式
【发布时间】:2016-07-29 08:38:46
【问题描述】:

我有一些代码声明了一个对象变量,并且这个变量从现有的数据库字段中分配了一个值。

Dim datestart As Object
datestart = dbToDate(dr("DateStart"))

该变量然后通过一个检查它是否为空的函数传递,然后将其转换为日期时间数据类型。

     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 数据类型导致值超出范围。

为什么会这样,我该如何解决?

【问题讨论】:

  • 检查表中 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/2014
  • Ypu 可能不需要将 DateTime 转换为字符串,而是查看参数化查询。

标签: sql database vb.net datetime insert


【解决方案1】:

很简单,你可以使用toString 函数。还要检查您的时区。问题可能出在时区设置上。

希望您将日期作为字符串传递给数据库,尝试将日期作为日期时间变量而不是字符串传递

Public Shared Function sqlDate(dt As DateTime) As String

    Return dt.toString("yyyy-MM-dd")

End Function

您的参考:https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

【讨论】:

  • 对不起 Sankar,我的错误,这是因为我在字符串末尾添加了 hhmmss tt。但是,我的日期之一为空,并且在名为 dbToDate 的函数中(参见问题),它不是返回“Nothing”而是返回 12:00:00AM,因此该函数无法将其插入数据库。我如何让它与这些一起使用?
  • @joe 所以你将时间与日期连接起来。对吗?
  • 我希望值只是一个日期。在数据库中,有 4 个日期时间。 3 代表没有时间的日期,第 4 代表没有日期的时间。 1 日期和时间字段允许空值。使用时间字段,这可以正常工作,因为它被转换为 Nothing。但是,空日期被转换为时间,这导致了问题
猜你喜欢
  • 2020-05-29
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多