2013-04-12 77 views
0

我想通過選擇基於特定電子郵件的記錄來顯示我的Windows窗體上的數據庫內容。如何從Windows窗體中的數據庫中檢索和顯示數據?

我使用下面的代碼,但它不會檢索它

private void editrecordbutton_Click(object sender, EventArgs e) 
{ 
    MyOleDbConnection.Open(); 
    string query = string.Format("select Email from login where Email='{0}'", editrecordtextBox.Text); 
    OleDbCommand vcom1 = new OleDbCommand(query, MyOleDbConnection.vcon); 
    OleDbDataReader reader = vcom1.ExecuteReader(); 
    //int check = vcom1.ExecuteNonQuery(); 
    string email = (string)reader["Email"]; 
    if (email == editrecordtextBox.Text) 
    { 
     if (editrecordtextBox.Text != string.Empty) 
     { 
      EmailReturn = editrecordtextBox.Text; 
      FinalEdit er = new FinalEdit(); 
      this.Close(); 
      er.Show(); 
      MyOleDbConnection.Close(); 
     } 
     else 
     { 
      MessageBox.Show("No record selected"); 
     } 
    } 
    else 
    { 
     MessageBox.Show("Invalid Email-Id"); 
    } 
    MyOleDbConnection.Close(); 
} 

請幫助我瞭解什麼是錯的,如果我在看正確的方式這種方式。

+0

您是否調試過您的代碼?什麼是EmailReturn和FinalEdit類?並注意[* SQL注入*](http://en.wikipedia.org/wiki/SQL_injection)。 –

+4

我希望我的電子郵件是'';丟棄表登錄;' – spender

+0

@spender你不要! =) –

回答

3

OleDbDataReader有一個方法Read。只要有數據可用,Read就會返回true。

通常你會使用這樣的:

while(reader.Read()) 
{ 
    // work with the current row of data  
} 

既然你永遠不會調用Read,你不獲取任何數據。您需要至少調用一次Read以將其移至查詢返回的第一行數據。

代碼的另一個重要問題與SQL Injection有關。你正在手動創建你的查詢字符串,這是非常危險的。您確實需要切換到參數化查詢。以下是一篇很好的博客文章,解釋如何使用這些文章:Give me parameterized SQL, or give me death

+0

謝謝你的幫助對不起,花了這麼長時間纔回到你... – user2273995

+0

@ user2273995它有助於解決你的問題嗎? :) –

相關問題