使用患者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.");
}
}
感谢您的帮助,并提前表示感谢。
我想你错过了添加参数
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 +这个语法我用过很多次了。