我的OleDbCommand参数不起作用
本文关键字:不起作用 参数 OleDbCommand 我的 | 更新日期: 2023-09-27 18:22:38
我对C#有点陌生,不确定自己做错了什么。试图找到解决方案,但失败了。提前谢谢。
当我不使用参数"从¦Ααρτίλα_Ασθε¦Β中选择*"时;表单将被来自阅读器的值填充。该表单不会带来值,换句话说,看起来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();
删除下面的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();
好吧,我看到你的代码有一些问题,但我不完全理解你的问题,所以我会尽可能多地回答。首先,正如我所写的,删除if (dr.Read())
,因为while
循环已经这样做了。现在,您的循环内部出现了一个问题,因为这意味着如果您有几个项,它们将覆盖前一个项,而您将留下最后一个项的值,所以您必须弄清楚您想对数据做什么,可能是dataGrid
或其他什么。
在你的问题中,你说的是你的查询,如果你不在MyGlobals.Patient_code
中输入值,查询仍然有效,至少我认为这就是你的意思。可能是因为您的数据库中只剩下最后一个值或string.empty
值。检查数据库和每次到达该行时的值,如果您想进一步帮助