我正在使用MySQL 4.1.14NT。訪問MySql的ADO.NET - 無法將MySQL日期/時間值轉換爲System.DateTime
我使用ADO.NET和MySQL連接器來查詢具有日期時間字段
當我運行查詢,我得到的錯誤「無法MySQL的日期/時間值轉換爲System.DateTime表「
我發現的唯一解決方法是將」Allow Zero Datetime = true「添加到數據庫的連接字符串中。
停止錯誤,但現在在數據集中,某些日期字段返回日期01/01/0001 00:00:00,但是當我在查詢瀏覽器中運行查詢時,它們具有正常的日期值。
我該怎麼辦?
編輯:
CREATE TABLE `notam_status` (
`DEMAND_ID` decimal(6,0) NOT NULL default '0',
`NOTAM_KEY` varchar(25) NOT NULL default '',
`AIRPORT` varchar(5) default NULL,
`ARR_DEP` char(1) default NULL,
`DEP_DATETIME` datetime default NULL,
`ARR_DATETIME` datetime default NULL,
`NOTAM_TEXT` text,
`LAST_MOD_DATETIME` datetime default NULL,
`STATUS` char(1) default NULL,
`STATUS_BY` varchar(15) default NULL,
`STATUS_DATETIME` datetime default NULL,
`SOURCE_ID` char(1) default NULL,
`ACCOUNT_ID` varchar(10) default NULL,
`NOTAM_ID` varchar(9) default NULL,
`NOTAM_PART` decimal(3,0) default NULL,
`CNS_LOCATION_ID` varchar(10) default NULL,
`REMARKS` text,
`TRIPNUMBER` decimal(6,0) default NULL,
PRIMARY KEY (`DEMAND_ID`,`NOTAM_KEY`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='InnoDB free: 11264 kB; InnoDB free: 7168 kB';
下面是我使用的代碼:
private List<Notam> GetNotamsFor(string airport)
{
List<Notam> result = new List<Notam>();
string sql =
@"SELECT a.source_id, a.account_id, a.notam_id, a.notam_part, a.cns_location_id, cast(a.last_mod_datetime as datetime), a.notam_report, a.q_code, a.effective_datetime, a.expire_datetime
FROM notams a
WHERE (a.cns_location_id = ?airport
OR a.cns_location_id = ?kairport)
AND a.source_id != 'F'
AND (a.cancel_datetime IS NULL OR a.cancel_datetime > UTC_Timestamp())
AND (a.delete_datetime IS NULL OR a.delete_datetime > UTC_Timestamp())
";
MySqlParameter[] parameters = new MySqlParameter[]
{
new MySqlParameter
{
ParameterName="airport",
MySqlDbType=MySqlDbType.String,
Value=airport
},
new MySqlParameter
{
ParameterName="kairport",
MySqlDbType=MySqlDbType.String,
Value="k"+airport
}
};
DataSet ds = RunMySqlQuery(sql, "weather", parameters);
// If I look at the dataset, the field "last_mod_datetime'
// has the value 01/01/0001 00:00:00
if (ds.Tables.Count > 0)
foreach (DataRow r in ds.Tables[0].Rows)
{
result.Add(NotamFiller.FillFrom(r));
}
return result;
}
private DataSet RunMySqlQuery(string sql, string database, MySqlParameter[] parameters)
{
DataSet ds = new DataSet();
try
{
MySqlCommand mc = new MySqlCommand(sql, _MySqlConnection);
if (parameters != null)
mc.Parameters.AddRange(parameters);
var adapter = new MySqlDataAdapter(mc);
adapter.Fill(ds);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return ds;
}
你能指出哪些值導致你的問題? –
你的模式是什麼樣的,你的代碼是什麼樣的?你確定你要求填寫數據而不是null嗎? (一個簡短但完整的程序+ schema +數據證明這個問題會使這個問題更容易診斷。) –
你是否必須使用一個7歲以上的MySQL版本?你有沒有在更新的版本上嘗試過相同的代碼? –