2017-01-30 40 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)得到了同样的错误给定的键不存在在词典

相关问题