The same testcase,
MySqlConnector is failed, MySql.Data works!
[TestMethod]
public void Test_DateTime_DataType()
{
string connectionString1 = "Server=FishDbServer;Database=MyNorthwind;Uid=user1;Pwd=qaz1@wsx";
string connectionString2 = "Server=FishDbServer;Database=MyNorthwind;Uid=user1;Pwd=qaz1@wsx;Allow Zero Datetime=True;Convert Zero Datetime=True;";
object result1, result2;
using(MySqlConnection conn1 = new MySqlConnection(connectionString1)){
conn1.Open();
MySqlCommand command1 = conn1.CreateCommand();
command1.CommandText = "select now()";
result1 = command1.ExecuteScalar();
}
using( MySqlConnection conn2 = new MySqlConnection(connectionString2) ) {
conn2.Open();
MySqlCommand command2 = conn2.CreateCommand();
command2.CommandText = "select now()";
result2 = command2.ExecuteScalar();
}
Assert.AreEqual(typeof(DateTime), result1.GetType());
// set "Allow Zero Datetime=True", result is MySqlDateTime
Assert.AreEqual(typeof(MySql.Data.Types.MySqlDateTime), result2.GetType());
DateTime time1 = (DateTime)Convert.ChangeType(result1, typeof(DateTime));
// MySqlConnector throw error: System.InvalidCastException: Object must implement IConvertible.
// MySql.Data, It works!
DateTime time2 = (DateTime)Convert.ChangeType(result2, typeof(DateTime));
// MySqlConnector
// public struct MySqlDateTime : IComparable
// MySql.Data
// public struct MySqlDateTime : IMySqlValue, IComparable, IConvertible
Assert.AreEqual(time1, time2);
}
The same testcase,
MySqlConnector is failed, MySql.Data works!