【问题标题】:Efficiently updating a table's details?有效地更新表的详细信息?
【发布时间】:2013-06-20 16:28:50
【问题描述】:

我要做的是从数据库中检索患者的详细信息,然后根据在文本框中输入的值,它将更新患者的详细信息,但如果文本框为空,我将现有详细信息分配给文本框我认为这是相当愚蠢的。

您建议我如何改进以下代码以使其更高效或减少重复性?

代码:

client = new ServiceReference1.Service1Client();

pat = client.GetPatientbyID(txtUpdatePatientID.Text);
grdView.DataSource = pat;
grdView.DataBind();

if (txtUpdateForename.Text == "")
                txtUpdateForename.Text = pat[0].Forename;
if (txtUpdateSurname.Text == "")
                txtUpdateSurname.Text = pat[0].Surname;
if (txtUpdateStreet.Text == "")
                txtUpdateStreet.Text = pat[0].Street;
if (txtUpdateTown.Text == "")
                txtUpdateTown.Text = pat[0].Town;
if (txtUpdateCity.Text == "")
                txtUpdateCity.Text = pat[0].City;
if (txtUpdateDOB.Text == "")
                txtUpdateDOB.Text = pat[0].DOB.ToString();
if (txtUpdateHouseNumber.Text == "")
                txtUpdateHouseNumber.Text = pat[0].House_number;
if (txtUpdateMobile.Text == "")
                txtUpdateMobile.Text = pat[0].Mobile;

client.UpdateAllDetails(txtUpdatePatientID.Text, txtUpdateForename.Text, 
                        txtUpdateSurname.Text, txtUpdateStreet.Text, txtUpdateTown.Text, 
                        txtUpdateCity.Text, Convert.ToDateTime(txtUpdateDOB.Text),
                        txtUpdateHouseNumber.Text, txtUpdateMobile.Text);
client.Close();

GetPatients(txtUpdatePatientID);

【问题讨论】:

  • 您可以采取一些措施来减少此代码的重复性和更易于维护,但如果您的意思是“高效”,即它会运行得更快,那么您将无法做到大大加快了这个特定的代码 sn-p。
  • 您有什么建议可以减少代码的重复性?
  • 类似于 Richard 建议的内容,外加将 pat[0] 提取到变量中。

标签: c# database performance wcf


【解决方案1】:

正如他在 cmets 中指出的那样,我认为您无法做到这一点。如果这是你的逻辑,这就是需要做的。

您可以将if 检查和条件集提取到一个方法中来整理这段代码的外观吗?

类似:

private void SetIfNotEmpty(TextBox textBoxToSet, string value)
{
  if (textBoxToSet.Text == "")
    textBoxToSet.Text = value;
}

然后替换

        if (txtUpdateForename.Text == "")
            txtUpdateForename.Text = pat[0].Forename;
        if (txtUpdateSurname.Text == "")
            txtUpdateSurname.Text = pat[0].Surname;
        if (txtUpdateStreet.Text == "")
            txtUpdateStreet.Text = pat[0].Street;
        if (txtUpdateTown.Text == "")
            txtUpdateTown.Text = pat[0].Town;
        if (txtUpdateCity.Text == "")
            txtUpdateCity.Text = pat[0].City;
        if (txtUpdateDOB.Text == "")
            txtUpdateDOB.Text = pat[0].DOB.ToString();
        if (txtUpdateHouseNumber.Text == "")
            txtUpdateHouseNumber.Text = pat[0].House_number;
        if (txtUpdateMobile.Text == "")
            txtUpdateMobile.Text = pat[0].Mobile;

SetIfNotEmpty(txtUpdateForename, pat[0].Forename);
SetIfNotEmpty(txtUpdateSurname.Text, pat[0].Surname);
SetIfNotEmpty(txtUpdateStreet.Text, pat[0].Street);
SetIfNotEmpty(txtUpdateTown.Text, pat[0].Town);
SetIfNotEmpty(txtUpdateCity.Text, pat[0].City);
SetIfNotEmpty(txtUpdateDOB.Text, pat[0].DOB.ToString());
SetIfNotEmpty(txtUpdateHouseNumber.Text, pat[0].House_number);
SetIfNotEmpty(txtUpdateMobile.Text, pat[0].Mobile);

作为更高级别的设计点,如果这些是 WPF 文本框,您是否考虑过使用数据绑定?

【讨论】:

  • 谢谢,我想我的问题是我把事情复杂化了。
  • 从未听说过 WPF 文本框,能否详细说明一下?
  • 对不起,我的意思是这是 WPF 还是 WinForms 应用程序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多