2013-12-08 48 views
0

我有一個項目,它的一部分要求用戶輸入病人的ID,以顯示他/她的細節 這是我在代碼在C#中顯示從Access數據庫中的單行

 sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=hospital database.accdb"; 
     dbConn = new OleDbConnection(sConnection); 
     dbConn.Open(); 
     sql = "SELECT * FROM Patients"; 
     dbCmd = new OleDbCommand(); 
     dbCmd.CommandText = sql; 
     dbCmd.Connection = dbConn; 

     dbReader = dbCmd.ExecuteReader(); 


     listBox1.Items.Clear(); 




     if (dbReader.HasRows) 
     { 
      while (dbReader.Read()) 
      { 

       if (dbReader["PatientID"] != DBNull.Value) 
       { 

        int anInteger; 
        anInteger = Convert.ToInt32(textBox7.Text); 
        anInteger = int.Parse(textBox7.Text); 

        if (anInteger == 101) 
        { 

        } 

       } 


      } 
     } 

IF聲明,我不知道該寫什麼,只用這個ID顯示在患者的行上

請幫忙!!

+0

你爲什麼不只是查詢的一個病人的信息,你想的不是查詢所有的人? – PhoenixReborn

回答

0

,你必須使用一個變量,以確保您的ID被找到,並break;退出你的循環,一旦發現

if (dbReader.HasRows) 
     { 
      bool found = false; 
      while (dbReader.Read()) 
      { 

       if (dbReader["PatientID"] != DBNull.Value) 
       { 

        int anInteger; 
        anInteger = Convert.ToInt32(textBox7.Text); 
        anInteger = int.Parse(textBox7.Text); 

        if (anInteger == 101) 
        { 
         found = true ; Break; 

        } 

       } 


      } 
     } 
1

而是選擇所有的行,它是更有效的過濾一行你正在尋找使用一個參數和修改你的SQL語句如下。

sql = "SELECT * FROM Patients WHERE PatientID = [pID]"; 
    dbCmd = new OleDbCommand(); 
    dbCmd.CommandText = sql; 
    dbCmd.Connection = dbConn; 
    dbcmd.Parameters.AddWithValue("pID", 101); 
    dbReader = dbCmd.ExecuteReader(); 

我也建議尋找到了「使用」的條款。這是一個SO example

+0

+1有兩個非常小的註釋:(1)'AddWithValue'上缺少')'。 (2)對於ACE/Jet OLEDB,使用'?'作爲參數佔位符/名稱更爲常見,因爲提供程序忽略了實際的*名稱*,並且只使用它們指定的*順序*。 –

+0

謝謝戈登。我想我括號的用法是從VBA日子剩下的。 –

0
int anInteger = Convert.ToInt32(textBox7.Text);   
    sConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=hospital database.accdb"; 
    dbConn = new OleDbConnection(sConnection); 
    dbConn.Open(); 
    sql = "SELECT * FROM Patients where [email protected]"; 
    dbCmd = new OleDbCommand(); 
    dbCmd.CommandText = sql; 
    dbCmd.Parameters.AddWithValue("@PatientID",anInteger); 
    dbCmd.Connection = dbConn; 

    dbReader = dbCmd.ExecuteReader(); 


    listBox1.Items.Clear(); 
    while (dbReader.Read()) 
    { 
     //now display the reader values here : sample 
     //TextBox1.Text=dbReader["name"].ToString(); 
    } 
1
sql = "SELECT Count(*) FROM Patients WHERE PatientID = @PID"; 
    dbCmd = new OleDbCommand(); 
    dbCmd.CommandText = sql; 
    dbCmd.Connection = dbConn; 
    dbcmd.Parameters.AddWithValue("@PID", 101); 
    Int32 Cnt = dbCmd.ExecuteScalar(); 
if (Cnt > 0) 
{ 
// Do Something 
} 
else { // Do something}