没有给出一个或多个必需参数的值dr = ExecuteReader()

时间:2013-12-09 18:15:45

标签: c# oledbconnection executereader

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();
 }

这是错误:

  

没有给出一个或多个必需参数的值。

     

dr = cmd.ExecuteReader()

1 个答案:

答案 0 :(得分:1)

当使用OleDb提供程序时(特别是MS-Access,但我不能将其他提供程序排除在外),解析引擎会查看SELECT列列表的每个部分查询表中存在子句。如果由于任何原因(通常是列名称中的拼写错误),引擎找不到相应的列,则会将该名称视为参数,并期望在OleDbCommand.Parameters集合中提供参数。 如果没有参数,则抛出上述错误。

另一种可能性是您没有在上面的代码中初始化cmd变量 这意味着您正在为OleDbCommand使用全局变量 可能已用于另一个查询及其参数集合的变量不为空。

尝试在执行查询之前添加此行

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

然而,如果这是问题,那么我真的建议你重新考虑这种方法并避免这种工作的全局变量。
在本地定义和初始化OleDbCommand时,没有可衡量的性能损失