我有一个包含虚构患者的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.");
}
}
非常感谢帮助,并提前多多感谢。
答案 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。你首先尝试+。如果我们写任何值,那么就不需要了。