推出MySQL DATETIME(3)field => .NET DataTable.Load()现在失败了

时间:2016-06-15 17:55:16

标签: c# mysql datetime milliseconds

在我的一个MySQL表中引入DATETIME(3)字段(日期时间,分数为3,分数/毫秒)后,我的.NET应用程序现在在DataTable.Load(MySqlDataReader)调用中失败:

MySql.Data.Types.MySqlConversionException
Unable to convert MySQL date/time value to System.DateTime

   bei MySql.Data.Types.MySqlDateTime.GetDateTime()
   bei MySql.Data.MySqlClient.MySqlDataReader.GetValue(Int32 i)
   bei MySql.Data.MySqlClient.MySqlDataReader.GetValues(Object[] values)
   bei System.Data.ProviderBase.SchemaMapping.LoadDataRow()
   bei System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
   bei System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
   bei System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
   bei System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
   bei DimensionData.Apps.DatabaseInterface.ds_Main.ExecuteMySql(String p_Sql, DataGridView p_Output) in C:\1 - Data\dev\Database Interface\Database TestApp\ds_Main.cs:Zeile 1011.

代码段:

DataTable l_Table = new DataTable();
MySqlCommand l_SqlCmd = new MySqlCommand("SELECT * FROM `testtable`", ConnectionIsAlreadyPrepared);
MySqlDataReader l_SqlReader = l_SqlCmd.ExecuteReader();
l_Table.Load(l_SqlReader);              // <-- MySqlConversionException

通过Visual Studio调试器,读者的结果集对受影响字段的值的一些属性:

Day = 14
Hour = 16
IsNull = false
IsValidDateTime = true
Microsecond = 123000
Millisecond = 123
Minute = 10
Month = 6
Second = 11
TimezoneOffset = 0
Value = {14.06.2016 16:10:11}
Year = 2016

Ticks = 636015174111230000
TimeOfDay = {16:10:11.1230000}

MySql.Data.Types.IMySqlValue.MySqlDbType = DateTime
MySql.Data.Types.IMySqlValue.MySqlTypeName = "DATETIME"
MySql.Data.Types.IMySqlValue.SystemType = {Name = "DateTime" FullName = "System.DateTime"}
MySql.Data.Types.IMySqlValue.Value = {14.06.2016 16:10:11}

版本:

MySQL Connector / Net(mysql.data):6.9.8.0

MySQL ServerVersion:5.6.30-0ubuntu0.14.04.1

表格和数据:

CREATE TABLE `testtable` (
  `idtesttable` int(11) NOT NULL,
  `testvarchar` varchar(45) DEFAULT NULL,
  `testdatetime` datetime DEFAULT NULL,
  `testdatetimenew` datetime(3) DEFAULT NULL,
  PRIMARY KEY (`idtesttable`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `testtable` (`idtesttable`,`testvarchar`,`testdatetime`,`testdatetimenew`) VALUES (1,'test','2016-06-14 16:01:02','2016-06-14 16:10:11.123');

解决方案

我很抱歉,但这是我的错!我重新创建了测试表,现在一切正常!

我不知道原因,但是testdatetime字段的数据类型必须存在某种损坏,因为下面的Rahul建议的解决方法无效。将此字段的日期时间类型更改为datetime(0)后,一切都可以正常运行而无需CAST!

对不起,我的描述在这里指出了一个szenario,我从头开始创建表,但事实并非如此。

1 个答案:

答案 0 :(得分:0)

在这种情况下,您应修改您的查询以将其转换为DATETIME

SELECT `idtesttable`,
`testvarchar`,
`testdatetime`,
CAST(`testdatetimenew` AS DATETIME) AS Newdt
FROM `testtable`;

此外,如果发生此异常,请确保您使用的连接器支持您正在使用的特定MySQL版本。我确信,您需要升级或使用不同的连接器版本。