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

时间:2014-08-06 09:30:38

标签: c# sql winforms

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

我已将其设置为每次将记录提交到数据库时,都会为其提供唯一的ID号,即1001,1002等。

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

代码分为三组。

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

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

最后一组是“reader”,它通过使用相应类中的访问器方法在相关的TextBox中显示记录的信息。

第一集:

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.");
          }
      }

非常感谢帮助,并提前多多感谢。

2 个答案:

答案 0 :(得分:0)

我认为你错过了参数添加

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

试试这个

请试试这个

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())
                {....

答案 1 :(得分:0)

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

使用where子句,就好像它是varchar

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

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

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

当我们在where子句中写入变量时,只使用这个charecter&或+这是我多次使用的syntex。你首先尝试+。如果我们写任何值,那么就不需要了。