MySQL Datetime
MySQL 的 Datetime型態, 其值可以為NULL, 但若要把NULL放入資料庫, 則字串前後不可加 ”. 而若其值是一般的日期, 則前後又要加 ”, 如下說明
string cmd; cmd=string.Format("insert into table (日期) values ({0}), "NULL"); cmd=string.Format("insert into table (日期) values ('{0}'), "2020-01-01");
以上會讓程式碼變的很麻煩, 所以建議不要讓MySQL的Datetime變成NULL, 而是無值時則填入 ‘0000-00-00’
C# Datetime
C#的 DateTime不可為null, 若要讓DateTime可以像其他物件一樣有null的值, 就需使用 Nullable<DateTime> 泛型轉換
互相轉換
使用MySqlDataReader dr 讀取資料庫時, 若欄位為 date/time時, 絕對不能使用 dr[“birthday”].ToString(), 這會產生MySql Datetime無法轉換成 C# Datetime的奇怪錯誤.
讀取方式必需先使用 dr.GetMySqlDateTime(“birthday”)取得 MySqlDateTime 物件. 然後再轉成String後再進行轉換
public void Test(){
MySqlDataReader dr = cmd.ExecuteReader();
MySqlDateTime tmp=dr.GetMySqlDateTime("birthday");
item.dpOnboard.SelectedDate = G.ConvertSqlDate(tmp);
}
public Nullable<DateTime> ConvertSqlDate(MySqlDateTime d)
{
string s = d.ToString();
if (s.Equals("0000/0/0")) return null;
else return Convert.ToDateTime(s);
}
todo