我从MySQL读取数据,一个字段是MySQL中的日期时间字段。
我想将值转换为变量并转换为字符串,这样我就可以得到前10个字符:
Dim cdr_date As String = reader.GetString(0)
cdr_date = cdr_date.Substring(0, 10)
但是这在vb.net中显示错误,指出无法将datetime转换为系统日期时间
我也尝试了这些,但得到了同样的错误:
Dim cdr_date As DateTime = reader.GetDateTime(0).ToString()
cdr_date = cdr_date.Substring(0, 10)
Dim cdr_date As DateTime = reader.GetString(0).ToString()
cdr_date = cdr_date.Substring(0, 10)
答案 0 :(得分:1)
你不能将一种数据类型填充到另一种数据类型而不进行转换。有些代码不会在Option Strict下编译,因为它试图这样做:
Dim cdr_date As DateTime = reader.GetDateTime(0).ToString()
听起来你正试图从db var中剥离时间,所以把它作为DateTime
然后如果你必须将它用作字符串转换它:
Dim myDT As DateTime
rdr.Read()
' these do the same thing - get it as date:
myDT = Convert.ToDateTime(rdr("zDateTime"))
myDT = rdr.GetDateTime(0)
DateTime将始终具有日期和时间。要忽略时间,请使用"MM/dd/yyyy"
之类的内容,在显示或转换为字符串时忽略它。 <{1}},不需要10的幻数。
SubString
或者保存到字符串变量:
TextBox13.Text = myDT.ToString("MM/dd/yyyy")
然而,这:Dim notADate As String
' from a DB Reader:
notADate = rdr.GetDateTime(0).ToString("MM/dd/yyyy")
' in general:
notADate = myDT.ToString("MM/dd/yyyy")
表示其他错误。 DB Provider对象显然无法将db数据转换为NET DateTime Type。最可能的原因是数据不好。
而不是null,可以告诉MySQL将unable to convert datetime to system datetime
存储为零日期&#34;。为此,您可能需要修改连接字符串以附加:
01/01/0001 00:00:00
这些可以存储和转换非法的"server=....;convertzerodatetime=True;allowzerodatetime=True"
值。特别是DateTime
将返回零日期时间而不是抛出异常。在这种情况下(在注释中解决),由于返回是零日期但不是在DB中看到的,删除它并创建新行解决了它。
MySQL连接还有很多其他选项: