在我的一个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,我从头开始创建表,但事实并非如此。
答案 0 :(得分:0)
在这种情况下,您应修改您的查询以将其转换为DATETIME
SELECT `idtesttable`,
`testvarchar`,
`testdatetime`,
CAST(`testdatetimenew` AS DATETIME) AS Newdt
FROM `testtable`;
此外,如果发生此异常,请确保您使用的连接器支持您正在使用的特定MySQL版本。我确信,您需要升级或使用不同的连接器版本。