2012-01-10 2 views
0

나는 액세스 db와 연결을 만들고 어떤 조건을 사용하여 C#의 folowing 코드를 가지고 있습니다. 나는 쿼리에서 where 절을 사용하여 db에서 단일 행을 호출합니다. 페이지에 로그인하면 나는 그것이 folowing 오류를 표시하는 페이지를 새로 고침 할 때 약간의 시간이 지나면 데이터 accurately.But를 가져액세스 DB를 통해 C# 루프

내 코드가 내가 DB에서 데이터를 쿼리하고

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

벨로

는 "위치 0에서 어떤 행은 없다" 전역 변수를 사용하여 어디에서 하나의 행을 검색 할 수 있습니까?

Can Any Any can 어떻게하면 좋을까요?이 문제를 해결할 수 있습니까? 또는 사용자 로그인시 루프를 사용하여 데이터를 가져 오는 시간을 evry 한 다음 조건을 따르는 DB를 반복 할 수 있습니까?

답변

1

즉, 쿼리에서 아무 것도 반환하지 않으며

if (ds.Tables[0].Rows.Count>0) 
{ 
    String email = ds.Tables[0].Rows[0][1].ToString(); 
    ///... 
} 
그러므로 당신이이 줄을 호출 할 때 : 당신이 뭔가를 그 오류를 방지하려면 더 Row[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

+0

실제로 나는 openid를 사용하여 Google에서 인증을 거친 후 자신의 DB에서 다시 인증하고 DB에 전자 메일이 존재하면 페이지를 봅니다. 다른 페이지는 –

+0

이라고합니다. DB에서 단일 coloumn을 선택 함으로 이제 erro를 접을 수 없습니다. –