0
private void PopuniListu(){
    listBox1.Items.Clear();

    conn = new OleDbConnection(connString);
    conn.Open();

    cmd.Connection = conn;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT Imeiprezimeautora FROM Tabela1";

    dr = cmd.ExecuteReader();

    while (dr.Read())
    {
        listBox1.Items.Add(dr.GetValue(0));
    }

    dr.Close();
    conn.Close();
 }

エラーは次のとおりです。

1 つ以上の必須パラメーターに値が指定されていません。

dr = cmd.ExecuteReader()

4

1 に答える 1

1

プロバイダーを使用する場合OleDb(特に MS-Access を使用しますが、他のプロバイダーを除外することはできません)、構文解析エンジンは、SELECT句の列リストのすべての部分がクエリ対象のテーブルに存在するかどうかを調べます。何らかの理由 (通常は列名のタイプミス) で、エンジンが対応する列を見つけられない場合、エンジンは名前をパラメーターとして扱い、OleDbCommand.Parametersコレクションでパラメーターが提供されることを期待します。
パラメータが存在しない場合、上記のエラーがスローされます。

cmd別の可能性は、上記のコードで変数を初期化していないという事実です。
これは、 にグローバル変数を使用していることを意味しますOleDbCommand
別のクエリに使用された可能性がある変数で、そのパラメーター コレクションが空ではありません。

クエリを実行する前に、この行を追加してみてください

cmd.Parameters.Clear();
cmd.CommandText = "SELECT Imeiprezimeautora FROM Tabela1";

ただし、これが問題である場合は、このアプローチを再考し、この種の作業ではグローバル変数を避けることをお勧めします。
OleDbCommand をローカルで定義および初期化する際に、測定可能なパフォーマンスの低下はありません。

于 2013-12-09T18:25:56.450 に答える