2013-07-17 45 views
1

我對C#有點新鮮,不知道我在做什麼錯。試圖找到一個解決方案,但失敗了。提前致謝。我的OleDbCommand參數不能正常工作

當我不使用參數「select * fromΚαρτέλα_Ασθενή」;該表單將得到來自閱讀器的值。換句話說,表單看起來像select命令不起作用。

  OleDbCommand cmd = new OleDbCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "select * from Καρτέλα_Ασθενή where Κωδ_Ασθενή = @Κωδ_Ασθενή"; 
      cmd.Parameters.AddWithValue("@Κωδ_Ασθενή", MyGlobals.Patient_code); 
      cmd.Connection = accessdb; 
      accessdb.Open(); 

      OleDbDataReader dr = cmd.ExecuteReader(); 
      if (dr.Read()) 
      { 
       while (dr.Read()) 
       { 
        txt_patient_code.Text = dr["Κωδ_Ασθενή"].ToString(); 
        txt_Surname.Text = dr["Επώνυμο"].ToString(); 
        txt_Name.Text = dr["Όνομα"].ToString(); 
        txt_date.Text = Convert.ToDateTime(dr["Ημερομηνία_Γέννησης"]).ToShortDateString(); 
        txt_address.Text = dr["Διεύθυνση"].ToString(); 
        txt_area.Text = dr["Περιοχή"].ToString(); 
        txt_phone.Text = dr["Τηλ"].ToString(); 
        txt_fax.Text = dr["Φαξ"].ToString(); 
        txt_insurance.Text = dr["Ασφάλεια"].ToString(); 
        txt_comments.Text = dr["Παρατηρήσεις"].ToString(); 
        txt_history.Text = dr["Ιστορικό"].ToString(); 
        txt_alergies.Text = dr["Αλλεργίες"].ToString(); 
        txt_email.Text = dr["e-mail"].ToString(); 
       } 
      } 
      dr.Close(); 
      accessdb.Close(); 
+1

什麼是不工作? –

+1

有什麼問題? 順便說一句,你不需要if(dr.Read()),while循環已經做到了 –

回答

0

確定之前,我看到一些問題與您的代碼,但我不完全明白你的問題等等我會盡可能地回答它。 首先,正如我寫的,刪除if (dr.Read()),因爲while循環已經這樣做。 現在,您的循環內部存在問題,因爲這意味着如果您有多個項目,它們將覆蓋之前的項目,並且您將留下最後一個項目值,因此您必須確定要執行的操作與數據,可能是dataGrid什麼的。

在你的問題中,你說的是你的查詢,如果你沒有在MyGlobals.Patient_code中輸入值,那麼查詢仍然有效,至少我認爲這就是你的意思。可能是因爲那時你只剩下最後一個值或數據庫中可能存在的string.empty值。檢查數據庫和你每次到達該線時的價值,並告訴我們更多關於你的問題,如果你想進一步的幫助

+0

感謝男人,這是如果陳述造成的問題,謝謝。 –

1

刪除while循環像下面

if (dr.Read()) 
{ 
    txt_patient_code.Text = dr["Κωδ_Ασθενή"].ToString(); 
    //..... set all other text box values 

} 

,如果你只有一個記錄匹配您的SQL然後在第一dr.Read(),它會讀取該記錄。當你來while循環時,沒有記錄要從數據庫中獲取。

而且也有可能是列允許空值,打電話給字符串的方法你最好檢查的DBNull

txt_email.Text = dr["Επώνυμο"] == DBNull.Value ? string.Empty : dr["Επώνυμο"].ToString(); 
+0

我有空值我會試試看看會發生什麼。 –