2017-01-30 8 views
1

テーブルから単純なカウントを取得しようとすると例外が発生します。 "SELECT * FROM goods"でも "SELECT col1, col2 FROM goods"という例外を除いて、異なる選択された統計情報を試してみます - 例外なく動作します。私は間違って何をしていますか?ワークベンチからは、これらが選択されます。.Net MySqlエラー "指定されたキーが辞書に存在しませんでした"

指定されたキーが辞書に存在しませんでした。 System.Collections.Generic.KeyNotFoundException:指定されたキーが辞書に存在しない です。 MySql.Data.MySqlClient.NativeDriver.GetColumnData(MySqlFieldフィールド)で でSystem.Collections.Generic.Dictionary`2.get_Item MySql.Data.MySqlClient.MySqlField.SetFieldEncodingで(処理鍵キー)()のMySqlで
。 MySql.DataでData.MySqlClient.NativeDriver.GetColumnsData MySql.Data.MySqlClient.Driver.GetColumnsで(MySqlField [] 列()のInt32数)
MySql.Data.MySqlClient.ResultSet.LoadColumnsで(のInt32 NUMCOLS)。でMySqlClient.ResultSet..ctor MySql.Data.MySqlClient.MySqlDataReader.NextResultでMySql.Data.MySqlClient.Driver.NextResult(のInt32 STATEMENTID、ブール力)で(運転者D、のInt32 STATEMENTID、 のInt32 NUMCOLS)() MySql.Data.MySqlClient.MySqlCommandで MySql.Data.MySqlClient.MySqlCommand.ExecuteReaderでMySql.Data.MySqlClient.MySqlCommand.ResetReader()(たCommandBehavior 挙動)でMySql.Data.MySqlClient.MySqlDataReader.Close()。 \ 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(); 
} 

接続文字列に CでMySqlSybaseComparer.DbTester.Test(文字列&エラー)でのExecuteReader()
DB:Server=localhost; Database=art; Uid=ramunas; Pwd=xxxx; AllowUserVariables=True;

+2

整数変数になるカウント(*)のみを持つときは、executeScalarを使用したほうがよいでしょう。Int32 count = Convert.ToInt32(cmd.ExecuteScalar()); – dennis

+0

ExecuteScalarも例外をスローします。 – Ramunas

+0

商品と呼ばれるテーブルが存在し、あなたのウェブ設定で正しいデータベース名を指定していることを望みます。商品から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; 

私は.NETバージョン6.9.3用のMySQLコネクタを使用しています。同じ構造、同じ照合(utf8_unicode_ci)の異なる30のデータベースに接続し、異なるテーブルの内容私はユーザテーブルからコンテンツを選択するMySqlCommand.ExecuteReader()メソッドを実行したとき

、いくつかのデータベースで(30 4)Aが指定されたキーが辞書中に存在しなかった同じエラーを得ました。

関連する問題