2012-01-10 169 views
0

我有以下代码的c#中,我正在与访问数据库和使用一些条件的连接。我通过使用查询中的where子句从数据库调用单个行。当我登录到页面获取数据accurately.But一段时间后,当我刷新它显示了如下因素的错误页面c#通过访问数据库循环

“有在位置0无行” 我的代码是被娄

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

我从数据库中查询数据并使用全局变量线索来检索单行

可以任何人请告诉我,我怎么能删除这个问题,或者我可以循环通过数据库,evry时间,当用户登录它获取数据使用循环,然后按照条件

回答

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

+0

@AdeelAslam:我的代码已经告诉你在哪里。仔细看一下。 – Icarus 2012-01-10 06:42:47

+0

其实我从Google使用身份验证使用openid和身份验证从谷歌我再次从我自己的数据库进行身份验证,如果电子邮件存在数据库然后页面被查看,否则另一个页面被称为 – 2012-01-10 06:46:48

+0

通过选择从数据库单coloumn我现在变成folowing erro不能找到第1列。 – 2012-01-10 06:51:40