2012-01-10 168 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