テーブルから単純なカウントを取得しようとすると例外が発生します。 "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;
整数変数になるカウント(*)のみを持つときは、executeScalarを使用したほうがよいでしょう。Int32 count = Convert.ToInt32(cmd.ExecuteScalar()); – dennis
ExecuteScalarも例外をスローします。 – Ramunas
商品と呼ばれるテーブルが存在し、あなたのウェブ設定で正しいデータベース名を指定していることを望みます。商品からisnull(count(*)、0)を選択してください。ExecuteScalar – dennis