MySQL Datetime 與 C# Datetime

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *