2017-01-30 38 views
1

試圖從表中得到簡單的計數結果,例外情況如下。 試過不同的選擇statemens,這也是例外:「SELECT * FROM goods」,但「SELECT col1, col2 FROM goods」 - 無一例外地工作。我究竟做錯了什麼?從工作臺上選擇這些選項。.Net MySql錯誤「給定的密鑰不在字典中」

給定的鍵不在字典中。 System.Collections.Generic.KeyNotFoundException:字典中給出的鍵不是 。在 System.Collections.Generic.Dictionary`2.get_Item(TKEY的鍵)在 MySql.Data.MySqlClient.MySqlField.SetFieldEncoding()在 MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlField場)
MySQL的。 Data.MySqlClient.NativeDriver.GetColumnsData(MySqlField [] 列)在MySql.Data.MySqlClient.Driver.GetColumns(的Int32計數)
處 MySql.Data MySql.Data.MySqlClient.ResultSet.LoadColumns(的Int32數numCols)。 MySqlClient.ResultSet..ctor(駕駛員d,的Int32 statementId, 的Int32數numCols)在MySql.Data.MySqlClient.Driver.NextResult(的Int32 statementId,布爾力)處 MySql.Data.MySqlClient.MySqlDataReader.NextResult()MySql.Data.MySqlClient.MySqlDataReader.Close()處MySql.Data.MySqlClient.MySqlCommand MySql.Data.MySqlClient.MySqlCommand.ResetReader()在 MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(的CommandBehavior 行爲)。的ExecuteReader()
在MySqlSybaseComparer.DbTester.Test(字符串&誤差) C:\ MySqlSybaseComparer \ DbTester.cs:線68

代碼片斷:

using (MySqlConnection conn = new MySqlConnection(ConStrMySql)) 
{ 
    try 
    { 
     conn.Open(); 
     using (MySqlCommand cmd = new MySqlCommand("SELECT count(*) FROM goods", conn)) 
     { 
      using (MySqlDataReader reader = cmd.ExecuteReader()) 
      { 
       if (reader.Read()) 
        MessageBox.Show(reader[0].ToString()); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message + Environment.NewLine + ex.ToString();); 
    } 
    conn.Close(); 
} 

連接字符串DB:Server=localhost; Database=art; Uid=ramunas; Pwd=xxxx; AllowUserVariables=True;

+2

當你只有一個計數(*),這將是一個整數變量,它會更好使用executeScalar Int32 count = Convert.ToInt32(cmd.ExecuteScalar()); – dennis

+0

的ExecuteScalar拋出異常也。 – Ramunas

+0

我希望會有一個名爲商品的表,並且在您的web配置中指定了正確的數據庫名稱,請嘗試此操作也可以從商品中選擇isnull(count(*),0)並使用ExecuteScalar – dennis

回答

0

代碼是正確的,所有的建議也應該工作。剛剛刪除「整理服務器」設置並重新啓動服務器,一切都按預期工作。

enter image description here

1

嘗試使用

SELECT count(*) as count FROM goods 
+0

試過沒有成功 – Ramunas

0

代替這種說法:

using (MySqlCommand cmd = new MySqlCommand("SELECT count(*) FROM goods", conn)) 

用途:

using (var cmd = new MySqlCommand("SELECT COUNT(*) FROM goods", conn)) 

然後將其轉換使用的ExecuteScalar爲int值() 。像這樣的:

int count = Convert.ToInt32(cmd.ExecuteScalar()); 
+0

試過沒有成功 – Ramunas

+0

你是否也通過使用這個語句也得到相同的錯誤? –

+0

是,錯誤消息是相同 – Ramunas

0

我已經解決了你同樣的錯誤只需添加字符集連接字符串:

Server=myServer;Port=3306;Database=myDB15;User ID=usr33;Password=usr33P;CharSet=utf8; 

對我來說,我使用的是MySQL連接器用於.NET版本6.9.3。連接到30個相同的數據庫,具有相同的結構,相同的排序規則(utf8_unicode_ci)和不同的表格內容。

當我跑MySqlCommand.ExecuteReader()方法從用戶表中選擇內容,在某些數據庫A(30 4)得到了同樣的錯誤給定的鍵不存在在詞典

相關問題