1

我对 C# 有点陌生,不知道我做错了什么。试图找到解决方案但失败了。提前致谢。

当我不使用参数“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();
4

2 回答 2

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();
于 2013-07-17T08:29:07.010 回答
0

好的,我看到你的代码有一些问题,但我不完全理解你的问题,所以我会尽可能多地回答。首先,正如我所写,删除if (dr.Read()), 因为while循环已经这样做了。现在,循环内部存在问题,因为这意味着如果您有多个项目,它们将覆盖前一个项目,并且您将保留最后一个项目的值,因此您必须弄清楚要做什么数据,可能是一个dataGrid或什么。

在您的问题中,您正在谈论您的查询,如果您不在MyGlobals.Patient_code查询中输入价值仍然有效,至少我认为这就是您的意思。可能是因为那时您只剩下最后一个值或string.empty数据库中可能拥有的值。每次到达该线路时检查数据库和您拥有的价值,如果您需要进一步的帮助,请告诉我们更多关于您的问题

于 2013-07-17T08:44:35.417 回答