我收到此错误:
无法将MySQL日期/时间值转换为System.DateTime
当我尝试从MySQL数据库中获取数据时。我的MySQL数据库中有日期数据类型。但是,当将其检索到我的数据表中时,它得到了上面的错误。
我怎样才能解决这个问题?
我收到此错误:
无法将MySQL日期/时间值转换为System.DateTime
当我尝试从MySQL数据库中获取数据时。我的MySQL数据库中有日期数据类型。但是,当将其检索到我的数据表中时,它得到了上面的错误。
我怎样才能解决这个问题?
Answers:
如果我在Google上搜索“无法将MySQL日期/时间值转换为System.DateTime”,我会看到许多参考,这些参考涉及从Visual Studio访问MySQL的问题。那是你的背景吗?
建议的一种解决方案是:
这不是错误,而是预期的行为。请检查连接选项下的手册,并将“允许零日期时间”设置为true,如所附图片所示,错误将消失。
您必须添加Convert Zero Datetime=True
到您的连接字符串,例如:
server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True
将datetime值下拉为字符串,然后执行以下操作:DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles);
您只需将日期格式设置为从数据库返回的日期。最有可能是yyyy-MM-dd HH:mm:ss
。至少是给我的。
在此处查看有关的更多信息 DateTime.ParseExact
让MySql将您的unix时间戳转换为字符串。使用mysql函数FROM_UNIXTIME(113283901)
您可以使应用程序与MySql使用的日期和时间完全兼容。当应用程序在运行时运行时,请提供以下代码。首先转到应用程序事件。在工具列表中
这将打开一个新文件。该文件包含在应用程序启动时使用的代码。
将此代码写入该新文件:
Partial Friend Class MyApplication
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
My.Application.ChangeCulture("en")
My.Application.ChangeUICulture("en")
My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
End Sub
End Class
您可以使用对象的IsValidDateTime
属性MySqlDateTime
来帮助您确定是否可以将对象转换为,而不是更改连接字符串DateTime
。
我有一种情况,我试图从“ UpdateTime”列加载数据,该列仅在对行进行更新时才显式设置(而不是始终设置的InsertedTime)。对于这种情况,我使用了如下MySqlDataReader.GetMySqlDateTime
方法:
using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
if (await reader.ReadAsync())
{
DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
}
}
如果“允许零datetime = true”不起作用,则使用以下解决方案:-
将此添加到您的连接字符串: “ allow zero datetime = no” -使类型转换完美工作。
在Stimulsoft报告中,将此参数添加到连接字符串中(右键单击数据源->编辑)
Convert Zero Datetime=True;