c#循环访问Access DB

时间:2012-01-10 06:24:06

标签: c#

我有c#的下面代码,其中我与访问db和使用一些条件建立连接。我通过在查询中使用where子句从db调用单行。当我登录到页面时,它准确地获取数据。但是一段时间后,当我刷新页面时,它会显示以下错误

“0号位没有排” 我的代码是Bellow

protected void Page_Load(object sender, EventArgs e)
{
    OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|OID.mdb;Persist Security Info=False;");
    //OleDbConnection con = new OleDbConnection("Data Source=sml; User ID=sml; Password=sml; provider=OraOLEDB.Oracle");

    OleDbCommand cmd = new OleDbCommand();
    cmd.CommandText = "Select * from EMAILS WHERE EMAIL= '" + GlobalData.Email + "'";
    //cmd.CommandText = "Select * from EMAILS";
    cmd.CommandType = CommandType.Text;
    cmd.Connection = con;
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    DataSet ds = new DataSet();
    da.Fill(ds);

    String email = ds.Tables[0].Rows[0][1].ToString();

    if (email == GlobalData.Email)
    {
        Label2.Text = GlobalData.Email;
        Label1.Text = GlobalData.Name;
        Label3.Text = GlobalData.LastName;
        Label1.Visible = false;
        Label3.Visible = false;
        Label4.Text = Label1.Text + ' ' + Label3.Text;  
    }
}

我正在查询来自数据库的数据,并使用全局变量的cluse来检索单行

可以任何一个请告诉我,我该如何删除此问题,或者我可以循环访问数据库,当用户登录时,使用循环获取数据,然后按照条件

1 个答案:

答案 0 :(得分:1)

这意味着您的查询没有返回任何内容,因此当您调用此行时:

String email = ds.Tables[0].Rows[0][1].ToString();

你得到一个例外,因为没有Row[0]

如果您想避免该错误,请执行以下操作:

if (ds.Tables[0].Rows.Count>0)
{
   String email = ds.Tables[0].Rows[0][1].ToString();
   ///...
}

不要在代码中执行select *。习惯于列出要从表中选择的确切列。例如:

select email_address from Emails where id= 5

额外评论:您的上述查询毫无意义;您似乎正在尝试使用where子句中的相同电子邮件地址从表中选择电子邮件地址。如果您已经知道电子邮件,为什么还需要从数据库中选择它?根据变量名称( GlobalData.Email )判断,这似乎是预定义的值...