c#循环访问数据库

本文关键字:数据库 访问 循环 | 更新日期: 2023-09-27 18:19:48

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

"位置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;  
    }
}

我正在从DB中查询数据,并使用带有全局变量的where cluster来检索单行

任何人都可以吗?请告诉我,我如何删除这个问题,或者我如何在每次用户登录时通过数据库循环,它使用循环获得数据,然后按照条件

c#循环访问数据库

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

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)判断,这似乎是一个预定义的值。。。