我将切入追逐 - 作为我的应用程序的一部分,用户可以编辑病人床的警报范围(最小/最大心率等) - 这些警报范围变化被保存到床类实例(负责保存此数据,以及来自数据库的bedID等信息 - 用于识别)。 bed类实例在启动时创建:相关数据库表中每个床条目的一个实例。
数据库本身分为三个表 - 表" listOfBeds"成为目标。字符串" SQL_GETBEDINFO"返回" listOfBeds"中的所有记录table(" SELECT * FROM dbo.listOfBeds)。
该过程的一般流程是用户编辑当前所选床位的警报范围(无问题),当用户按下"应用&#34时,更新所选床位实例的值;按钮(没有问题),然后用户可以点击保存并退出应用程序(因此,对每个床的警报范围所做的更改被上传到数据库并被调用以便下次启动):后者是问题。虽然应用程序报告正确保存,但在重新加载更改后似乎还没有进行 - 好像它们从来都不是
下面我已粘贴用于保存对数据库的更改的代码;我很乐意根据需要添加其他细节 - 如果有人能指出我出错的地方,我将不胜感激! `
public void SaveDataSet(MainForm mainFormReference)
{
//Creates a new dataset called "dataSet", this will contain information from the database according to the query we use, then opens connection
System.Data.DataSet dataSet;
openConnection();
//Creates data adapter using database connection and select all records from listOfBeds
dbDataAdapter = new System.Data.SqlClient.SqlDataAdapter(SQLCommands.SQL_GETBEDINFO, dbConnection);
//Creates the dataset ready to be filled with data
dataSet = new System.Data.DataSet();
//Fills the dataset with information grabbed by the data adapter
dbDataAdapter.Fill(dataSet);
try
{
//Get table from dataset, get number of rows in table
DataTable dtBedInfo = dataSet.Tables[0];
int count = dtBedInfo.Rows.Count;
//For each bed in the list of bed instances, do the following
foreach (Bed bed in mainFormReference.listOfBeds)
{
//For each row in the datatable
for (int i = 0; i < count; i++)
{
//If bed instance ID and bedID in row match
if (Convert.ToInt32(dtBedInfo.Rows[i]["bedID"]) == bed.bedInstanceID)
{
//Assign new values from bed instance to datatable row
dtBedInfo.Rows[i]["bedMinHeartRate"] = bed.bedInstanceMinHeartRate;
dtBedInfo.Rows[i]["bedMaxHeartRate"] = bed.bedInstanceMaxHeartRate;
dtBedInfo.Rows[i]["bedMinBreathRate"] = bed.bedInstanceMinBreathRate;
dtBedInfo.Rows[i]["bedMaxBreathRate"] = bed.bedInstanceMaxBreathRate;
dtBedInfo.Rows[i]["bedMinSysBloodPress"] = bed.bedInstanceMinSysBloodPress;
dtBedInfo.Rows[i]["bedMaxSysBloodPress"] = bed.bedInstanceMaxSysBloodPress;
dtBedInfo.Rows[i]["bedMinDiaBloodPress"] = bed.bedInstanceMinDiaBloodPress;
dtBedInfo.Rows[i]["bedMaxDiaBloodPress"] = bed.bedInstanceMaxDiaBloodPress;
dtBedInfo.Rows[i]["bedMinBodyTemp"] = bed.bedInstanceMinBodyTemp;
dtBedInfo.Rows[i]["bedMaxBodyTemp"] = bed.bedInstanceMaxBodyTemp;
}
}
}
//Do update
System.Data.SqlClient.SqlCommandBuilder builder = new System.Data.SqlClient.SqlCommandBuilder(dbDataAdapter);
dbDataAdapter.UpdateCommand = builder.GetUpdateCommand();
dbDataAdapter.TableMappings.Add("listOfBeds", "0");
dbDataAdapter.Update(dataSet);
MessageBox.Show("Save successful!");
closeConnection();
}
catch (Exception Excep)
{
//Throw exception
MessageBox.Show("Save failed! Error:\n" + Excep);
}
}
`