简体   繁体   English

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

[英]How to update database for selective information from selected textboxes only? (asp.net c#)

I'm currently coding the SQL for a page to update user details. 我目前正在为页面的SQL编码以更新用户详细信息。

How do I code in such a way that the program only updates the textboxes which the user keys information into (meaning to say that user can choose not to fill in all textboxes for update)? 我该如何编码,使程序仅更新用户将信息输入到其中的文本框(这意味着用户可以选择不填写所有文本框进行更新)?

I'm also not sure if I should be using DBnull. 我也不确定是否应该使用DBnull。 Please advise. 请指教。

Below is my SQL code, and please click here to see my GUI 以下是我的SQL代码,请单击此处查看我的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();
}

Try this code snippet. 试试这个代码片段。 I have used it in stored procedures before and know it works in stored procedures in MSSQL (you did not specify which DB). 我以前在存储过程中使用过它,并且知道它在MSSQL的存储过程中可以工作(您未指定哪个DB)。

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

Coalesce will return the first parameter with a non-null value. 合并将返回具有非空值的第一个参数。 So if you pass null into one of the variables, the coalesce operator will select the value currently stored in the column (the second parameter of the coalesce method). 因此,如果将null传递给变量之一,则合并运算符将选择当前存储在列中的值(合并方法的第二个参数)。

See here for more information about coalesce. 有关合并的更多信息,请参见此处

The most simplest way is- You can load the current data in each textbox at the time of page_load. 最简单的方法是-您可以在page_load时在每个文本框中加载当前数据。 Later when user wants to change any value, he will do the same and then update all text boxes values. 稍后,当用户想要更改任何值时,他将执行相同的操作,然后更新所有文本框的值。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM