使用患者ID从Access DB检索特定的记录

本文关键字:检索 记录 DB Access 患者 ID | 更新日期: 2023-09-27 18:16:33

我有一个Access数据库,其中包含虚构的患者,以及各种数据(如地址、会诊记录和日期),等等。

我已经对它进行了设置,以便每次将一条记录提交到数据库时,都给它一个唯一的ID号,即1001、1002,等等。

(对于那些不确定我的问题是什么的人,就是这样)->我想做的是使用那个ID号,并将记录中的数据加载到屏幕上的控件中。我应该提到这是一个Windows窗体应用程序,并且我已经设置了一个窗体来处理(即将输入的ID号作为参数传递)到适当的方法。

代码有三组

第一个是按钮被单击时执行的代码(因此它将传递字符串,作为整数强制转换到适当的方法中)。

第二组是ID传递给的方法——它包括选择我需要的信息的SQL查询。

最后一组是"reader",它通过使用来自适当类的accessor方法在关联的TextBoxes中显示记录的信息。

第一组:

private void btnLoadPatientRecord_Click(object sender, EventArgs e)
    {
        if (String.IsNullOrEmpty(txtBoxPatientID.Text))
        {
            MessageBox.Show("You must enter a Patient ID Number to proceed.", "ATTENTION!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
        else
        {
            patientID = Convert.ToInt32(txtBoxPatientID.Text);
            dmAccessor.loadPatientRecord(patientID);
        }

第二组:

public void loadPatientRecord(int patientID)
      {
          string connString = "Provider= Microsoft.ACE.OLEDB.12.0;" + "Data Source= C:''temp''IntelliMed.accdb";
          string queryString = "SELECT * FROM PatientRecord WHERE ID = @patientID ";

第三组:(第二组和第三组实际上是两组代码,一个接一个,但出于可读性的考虑,我把它们分开了)

我还应该提一下,我在这个问题上连续花了大约12个小时,但没有结果。

try
          {
              using (OleDbConnection connection = new OleDbConnection(connString))
              {
                OleDbCommand cmnd = new OleDbCommand(queryString, connection);
                connection.Open();
                OleDbDataReader reader = cmnd.ExecuteReader();
                while (reader.Read())
                {
                    string patReaderFirstName = reader.GetString(3);
                    string patReaderLastName = reader.GetString(5);
                    string patReaderGender = reader.GetString(6);
                    string patReaderDateOfBirth = reader.GetString(7);
                    string patReaderResidentialAddress = reader.GetString(8);
                    string patReaderPostalAddress = reader.GetString(9);
                    string patReaderNHINumber = reader.GetString(10);
                    string patReaderConsultDate = reader.GetString(11);
                    string patReaderConsultNotes = reader.GetString(12);
                    //Data processing code below this line.
                    PatientRecord patientRecordClassOverseer = new PatientRecord();
                    patientRecordClassOverseer.setPatientFirstName(patReaderFirstName);
                    patientRecordClassOverseer.setPatientLastName(patReaderLastName);
                    patientRecordClassOverseer.setPatientGender(patReaderGender);
                    patientRecordClassOverseer.setDateOfBirth(patReaderDateOfBirth);
                    patientRecordClassOverseer.setPatientResidentialAddress(patReaderResidentialAddress);
                    patientRecordClassOverseer.setPostalAddress(patReaderPostalAddress);
                    patientRecordClassOverseer.setPatientNHINumber(patReaderNHINumber);
                    patientRecordClassOverseer.setPatientConsultationDate(patReaderConsultDate);
                    patientRecordClassOverseer.setPatientConsultationNotes(patReaderConsultNotes);
                }
                reader.Close();
                }
              ctnIntelliMed.Close();
          }
          catch (Exception exf)
          {
              MessageBox.Show("Sorry, an error has occurred while attempting to load the selected record from the database. Please try this again.");
          }
      }

感谢您的帮助,并提前表示感谢。

使用患者ID从Access DB检索特定的记录

我想你错过了添加参数

cmnd.Parameters.Add(new OleDbParameter("@patientID", patientID);

试试这个

Please try this

using (OleDbConnection connection = new OleDbConnection(connString))
              {
                connection.Open();
                OleDbCommand cmnd = connection.CreateCommand();
                cmnd.CommandText = queryString;
                cmnd.Parameters.Add(new OleDbParameter("@patientID", patientID);
                OleDbDataReader reader = cmnd.ExecuteReader();
                while (reader.Read())
                {....

您的patientID变量的数据类型是什么?

where子句当作varchar使用

WHERE ID = '"& patientID &"'  OR  '"+ patientID +"'

,如果它是整数,那么你可以尝试…

where ID="& paitentID &"  OR  "+ patientID +" 

当我们在where子句中写入变量时,只使用&Or +这个语法我用过很多次了。