2013-11-23 35 views
2

我用SqlCe作爲我的數據庫,但是當我複製所有表到MySql數據庫這個異常開始!令人驚異的錯誤「給定的密鑰不在字典中。」

我的代碼:

using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR)) 
{ 
    try 
    { 
     conSQL.Open(); 
    } 
    catch (MySqlException e) 
    { 
     string errMsg = e.Message; 
     MessageBox.Show(errMsg, "error", MessageBoxButtons.OK, 
         MessageBoxIcon.Error); 
     return false; 
    } 
    using (MySqlCommand comSQL = conSQL.CreateCommand()) 
    { 
     comSQL.CommandText = "SELECT " + Column + " FROM " + TableName 
           + " WHERE " + Column + "[email protected]"; 
     comSQL.Parameters.Add("@param", MySqlDbType.VarChar); 
     comSQL.Parameters["@param"].Value = Value; 
     MySqlDataReader drSQL; 
     bool hasRows = false; 
     try 
     { 
      drSQL = comSQL.ExecuteReader(); 
      hasRows = drSQL.Read(); 
     } 
     catch (MySqlException e) 
     { 
      string errMsg =e.Message; 
      MessageBox.Show(errMsg, "error", MessageBoxButtons.OK, 
          MessageBoxIcon.Error); 
     } 
     if (!hasRows) 
      return false; 
     else 
     { 
      return true; 
     }; 
    } 
} 

例外:

給定的關鍵是不存在的字典。

線:

drSQL = comSQL.ExecuteReader(); 

因爲在消息框中沒有顯示這種異常有趣!它就像一個運行時錯誤,似乎我的TRY根本不工作!

+5

錯誤通常很驚人.. –

+3

[橡皮鴨](http://en.wikipedia.org/wiki/Rubber_duck_debugging)更令人驚奇:) – Noctis

+0

您的嘗試不起作用,因爲您正在抓住' MySqlException',而不是'Exception' – wudzik

回答

1
using (MySqlConnection conSQL = new MySqlConnection(conSQLSTR)) 

幕後MySQL會分析你的連接字符串與一個Dictionary鍵/值對。確保您的連接字符串格式正確。

0

這是一個真正的令人驚異的 mysql連接器錯誤消息,因爲它太泛型,並沒有描述很多細節或線索確切的問題來源。

當你看到這個錯誤,你應該檢查任何字符串傳遞到最近的MySQL執行的命令專門ConnectionStringDatabase NameTable NameColumn Names

1

對於它的價值,因爲這線程是有點老了。但今天我遇到了同樣的錯誤。起初並不清楚哪裏出了問題。

我們MariaDB的升級到10.0.24-MariaDB的-7(Ubuntu的16.04)後,我的.NET應用程序在打開連接導致了錯誤:「給定的關鍵是不存在的字典。」

更新mysql.data.dll到最新版本修復它。 (https://dev.mysql.com/downloads/connector/net/6.9.html

相關問題