如何仅从选定的文本框更新选择性信息的数据库? (asp.net c#)

时间:2016-07-06 05:25:06

标签: c# asp.net sql-server

我目前正在为一个页面编写SQL来更新用户详细信息。

如何以这样一种方式编写代码,即程序只更新用户键入信息的文本框(意思是说用户可以选择不填写所有文本框进行更新)?

我也不确定我是否应该使用DBnull。请指教。

下面是我的SQL代码,请点击here查看我的GUI

protected void btnconfirmupdatedetails_Click(object sender, EventArgs e)
{
    string member = (String)Session["ssmem"];
    string strconnect = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
    SqlConnection myConnect = new SqlConnection(strconnect);

    string strCommandText = "UPDATE Customer SET Password=@pass, Email=@email, Phone=@phone, Birthdate=@birthday, FirstName=@firstname, LastName=@lastname, Street1=@street1, Street2=@street2, City=@city, State=@state, Postal=@postal ";
    strCommandText+="WHERE Username=@member";

    SqlCommand cmd = new SqlCommand(strCommandText, myConnect);

    cmd.Parameters.Add("@member", SqlDbType.VarChar);
    cmd.Parameters.Add("@pass", SqlDbType.VarChar, 255);
    cmd.Parameters.Add("@email", SqlDbType.VarChar, 200);
    cmd.Parameters.Add("@phone", SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@firstname", SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@lastname", SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@birthday", SqlDbType.Date);
    cmd.Parameters.Add("@street1", SqlDbType.VarChar, 200);
    cmd.Parameters.Add("@street2", SqlDbType.VarChar, 200);
    cmd.Parameters.Add("@city", SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@state", SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@postal", SqlDbType.VarChar, 50);

    cmd.Parameters["@member"].Value = member;

    if (txtPassword.Text == "")
    {
        cmd.Parameters["@pass"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@pass"].Value = txtPassword.Text;
    }//=====

    if (txtEmail.Text == "")
    {
        cmd.Parameters["@email"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@email"].Value = txtEmail.Text;
    }//=====

    if (txtPhoneNumber.Text== "")
    {
        cmd.Parameters["@phone"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@phone"].Value = txtPhoneNumber.Text;
    }//=====

    if (txtFirstName.Text =="")
    {
        cmd.Parameters["@firstname"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@firstname"].Value = txtFirstName.Text;
    }//======

    if (txtBirthday.Text =="")
    {
        cmd.Parameters["@lastname"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@lastname"].Value = txtLastName.Text;
    }//======

    if (txtBirthday.Text =="")
    {
        cmd.Parameters["@birthday"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@birthday"].Value = txtBirthday.Text;
    }//======

    if (txtStreet1.Text =="")
    {
        cmd.Parameters["@street1"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@street1"].Value = txtStreet1.Text;
    }//=======

    if (txtStreet2.Text =="")
    {
        cmd.Parameters["@street2"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@street2"].Value = txtStreet2.Text;
    }//=======

    if (txtCity.Text =="")
    {
        cmd.Parameters["@city"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@city"].Value = txtCity.Text;
    }//========

    if (txtState.Text =="")
    {
        cmd.Parameters["@state"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@state"].Value = txtState.Text;
    }//========

    if (txtPostalCode.Text =="")
    {
        cmd.Parameters["@postal"].Value = DBNull.Value;
    }
    else
    {
        cmd.Parameters["@postal"].Value = txtPostalCode.Text;
    }

    myConnect.Open();

    int result = cmd.ExecuteNonQuery();

    if (result > 0)
    {
        lblErr.Text = "Update successful";
    }
    else
    {
        lblErr.Text = "Update fail";
    }

    myConnect.Close();
}

2 个答案:

答案 0 :(得分:0)

试试这段代码。我之前在存储过程中使用过它并且知道它在MSSQL中的存储过程中工作(你没有指定哪个DB)。

UPDATE Customer SET Password=COALESCE(@pass, Password), Email= COALESCE(@email, Email)

Coalesce将返回带有非null值的第一个参数。因此,如果将null传递给其中一个变量,coalesce运算符将选择当前存储在列中的值(coalesce方法的第二个参数)。

有关合并的详情,请参阅heightProperty

答案 1 :(得分:0)

最简单的方法是 - 您可以在page_load时加载每个文本框中的当前数据。 稍后,当用户想要更改任何值时,他将执行相同操作,然后更新所有文本框值。