从VS C#2010中的访问数据库中获取下一行

时间:2013-10-18 06:18:43

标签: c#

我尝试了以下代码,但它抛出异常“没有为一个或多个必需参数指定值。”

protected void Button2_Click(object sender, EventArgs e)
{
      string constr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data      
      Source=C:\Users\yogi\Documents\mydb.mdb";
      string cmdstr1 = "select count(*) from quant_level1";
      OleDbConnection con1 = new OleDbConnection(constr);
      OleDbCommand com1 = new OleDbCommand(cmdstr1, con1);
      con1.Open();
      int count = (int) com1.ExecuteScalar();
      int i = 2;
      while (i <= count)
      {
           string cmdstr = "select * from quant_level1 where id = i";
           OleDbConnection con = new OleDbConnection(constr);
           OleDbCommand com = new OleDbCommand(cmdstr, con);
           con.Open();
           OleDbDataReader reader = com.ExecuteReader();
           reader.Read();
           label1.Text = String.Format("{0}", reader[1]);
           RadioButton1.Text = String.Format("{0}", reader[2]);
           RadioButton2.Text = String.Format("{0}", reader[3]);
           RadioButton3.Text = String.Format("{0}", reader[4]);
           RadioButton4.Text = String.Format("{0}", reader[5]);
           con.Close();
           i++;
      }
      con1.Close();
}

3 个答案:

答案 0 :(得分:0)

选择声明中有一个错误: 您正在尝试选择您未提供的ID。

 string cmdstr = "select * from quant_level1 where id = i";

您的select语句应如下所示:

string cmdstr = "select * from quant_level1 where id = " + i;

您的循环计数器是/在您的字符串中。它不会自动替换。

答案 1 :(得分:0)

由于您希望每次点击按钮都能获取下一行。

int i=2;
protected void Button2_Click(object sender, EventArgs e)
{
      string constr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data      
      Source=C:\Users\yogi\Documents\mydb.mdb";
      string cmdstr1 = "select * from quant_level1 where id ="+i;
      OleDbConnection con1 = new OleDbConnection(constr);
      OleDbCommand com1 = new OleDbCommand(cmdstr1, con1);
      con1.Open();
      if(reader.Read())
      {
           label1.Text = String.Format("{0}", reader[1]);
           RadioButton1.Text = String.Format("{0}", reader[2]);
           RadioButton2.Text = String.Format("{0}", reader[3]);
           RadioButton3.Text = String.Format("{0}", reader[4]);
           RadioButton4.Text = String.Format("{0}", reader[5]);
           i++;
      }
      con1.Close();
}

答案 2 :(得分:0)

试试这个 -

仅在您使用Web应用程序

时才有效
protected void Button2_Click(object sender, EventArgs e)
{
    int i;
    if (ViewState["count"] != null)
        i = Convert.ToInt32(ViewState["count"].ToString());
    else
        i = 2; // assuming that it is your starting point as given in question

    string constr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\yogi\Documents\mydb.mdb";
    string cmdstr1 = "select count(*) from quant_level1";
    OleDbConnection con1 = new OleDbConnection(constr);
    OleDbCommand com1 = new OleDbCommand(cmdstr1, con1);
    con1.Open();
    int count = (int)com1.ExecuteScalar();

    if (i < count)
    {
        string cmdstr = "select * from quant_level1 where id = i";
        OleDbConnection con = new OleDbConnection(constr);
        OleDbCommand com = new OleDbCommand(cmdstr, con);
        con.Open();
        OleDbDataReader reader = com.ExecuteReader();
        reader.Read();
        label1.Text = String.Format("{0}", reader[1]);
        RadioButton1.Text = String.Format("{0}", reader[2]);
        RadioButton2.Text = String.Format("{0}", reader[3]);
        RadioButton3.Text = String.Format("{0}", reader[4]);
        RadioButton4.Text = String.Format("{0}", reader[5]);
        con.Close();
        i++;
        ViewState["count"] = i.ToString();
    }
    con1.Close();
}

这样可以解决您的问题。快乐的编码:)