2007年12月1日 星期六

解決 MySQL 與 .NET 間 DateTime 資料格式衝突的問題

如果有用 MySQL Connector for .NET platform 的人可能在將 DateTime 格式的資料寫入資料庫時,會出現以下錯誤訊息:(我用的是 5.1 版 for .NET 2.0)
Unable to convert MySQL date/time value to System.DateTime
此例外很明顯的說明要將 DateTime 的格式轉換為 MySQL 可以接受的 DateTime 格式!

有兩種方式:

1、SQL 語法為自己組合而成的字串

此時只要知道 .NET DateTime 之間與 MySQL DateTime 之間格式有何不同即可。

.NET DateTime:2007/01/01 12:00:00

MySQL DateTime:2007-01-01 12:00:00

只要將年月日中間的「/」符號換成「-」即可囉!


2、由程式所自動產生的 SQL 語法

若是用了 MySqlDataAdapter、MySqlCommandBuilder、DataTable 所搭配起來的組合,若是 DateTime 的欄位,就必須要傳入 MySqlDateTime 格式的資料!

注意喔! 不是 DateTime 而是 MySqlDateTime 喔!

而 MySqlDataTime 的 class 在 MySql.Data.Type namespace 中,必須在程式前面先 using 才行,這是必須要注意的!

轉換範例如下:
//這是會發生錯誤的寫法,因為 MySQL 不接受 .NET DateTime 格式的資料
myDataTable.Rows[0]["myDateTime"] = DateTime.Parse("2007/01/01 12:00:00");

//必須初始化一個 MySqlDateTime 的物件傳入才行
myDataTable.Rows[0]["myDateTime"] = new MySqlDateTime(2007, 1, 1, 12, 0, 0);
當然,MySqlDateTime 的 constructor 有很多種,甚至可以傳入 .NET 的 DateTime 做為參數,詳細資料可以參考 MySQL Connector for .NET 的檔案中的文件檔,再以自己方便的方式傳入即可。

沒有留言:

張貼留言