2013-04-12 127 views
2

我正在處理一個C#項目,我面臨一個問題。該程序允許用戶連接到MySQL數據庫並從每個選定的表中檢索信息並將數據寫入文件。問題是因爲我不知道模式將會是什麼樣或者它將包含什麼值。如果timestamp列包含日期0000-00-00 00:00:00我得到了轉換錯誤,無論我嘗試什麼,它都無法工作。我試圖轉換爲字符串我試圖轉換爲DateTime,但我總是得到錯誤。無法將MySQL.DateTime轉換爲System.DateTime與0000-00-00 00:00:00值

下面是如何我目前正在試圖獲取數據:

using (ConnectMySQLDB db = new ConnectMySQLDB(databaseSettings)) 
{ 
    string query = string.Format("SELECT * FROM {0}.{1}", database, table); 
    Console.WriteLine("Query: {0}", query); 
    using (MySqlCommand cmd = new MySqlCommand(query, db.conn)) 
    { 
     using (MySqlDataReader reader = cmd.ExecuteReader()) 
     { 
     int i = 1; 
     while (reader.Read()) 
     { 
      Console.WriteLine("ID: {0}", i); 
      fieldsAndValues = new Dictionary<string, string>(); 
      foreach (ColumnDataTypes fieldAndType in fieldsAndTypes) 
      { 
       Console.WriteLine("Column: {0} Type: {1}", fieldAndType.field, fieldAndType.dataType); 
       string formattedValue = ""; 
       if (fieldAndType.dataType == "timestamp") 
       { 
        DateTime date = DateTime.Parse(reader.GetDateTime(fieldAndType.field).ToString()); 
        formattedValue = date.ToString("yyyyMMdd"); 
       } 

       else 
       { 
        formattedValue = getDBFormattedValue(reader.GetString(fieldAndType.field), fieldAndType.dataType); 
        fieldsAndValues.Add(fieldAndType.field, formattedValue); 
       } 
      } 
      rows.Add(fieldsAndValues); 
      i++; 
     } 
     } 
    } 
} 

我還添加了允許零日期和convertzerodate在連接字符串爲null選項,如下所示:

connString = "server=" + server + ";uid=" + username + ";pwd=" + password + ";port=" + port + ";Allow Zero Datetime=true;zeroDateTimeBehavior=convertToNull;Convert Zero Datetime=true"; 

任何幫助將不勝感激。

感謝

+0

爲什麼要將DateTime轉換爲字符串,然後再解析它?當然,你只會希望它返回與它開始相同的DateTime。 –

+0

另外,你還沒有告訴我們究竟發生了什麼。你說你得到了「錯誤」,但沒有說出那個錯誤是什麼。 –

+0

順便說一句,你使用了哪個MySQL連接器?我見過的關於這些連接字符串選項的所有內容都表明它適用於Java驅動程序。你確定你正在使用的驅動程序支持它們嗎? –

回答

7

看着this documentation,它看起來像你指定兩個相互矛盾的選項(AllowZeroDateTime=trueConvertZeroDateTime=true)和其中一個似乎沒有上市(ZeroDateTimeBehavior=ConvertToNull)。

我建議,除非你有實際數據是DateTime.MinValue你不想用「零」值混淆,你只是指定ConvertZeroDateTime=true和檢測,如果結果是DateTime.MinValue。您絕對不應該請致電reader.GetDateTime(),然後將結果轉換爲字符串,然後回到DateTime - 應該儘可能避免字符串轉換,因爲它們可以很容易地爲您搞砸。

對於這些「零」值,你想要什麼字符串值並不是很清楚,但你應該能夠相當容易地用DateTime.MinValue對它們進行特殊處理。就我個人而言,我會盡可能地儘量保持數據的「本地」形式,而不是將所有內容都轉換爲字符串,但這是一場不同的戰鬥。

相關問題