更新查询成功但在 SQL 服务器数据库中得到空白值

Update query successful but getting blank values in SQL Server database

我正在尝试在 ASP.NET 中创建一个工作门户,它从用户那里获取个人信息并将其存储到数据库中。

数据库 table 有这些列

 name, fathername, nic, cell, email, city, province, district, dob, 
 address, disability, orphan

在注册时,用户仅输入(姓名、父亲姓名、手机号码、cnic、出生日期)的值。用户成功注册后,他们必须登录并进入门户。该门户有一个选项卡容器,其中个人信息选项卡包含来自用户的个人信息。注册时输入的信息已经显示在文本框中,其余信息将使用文本框和下拉列表输入。

问题是,当我尝试使用更新查询输入剩余信息时,查询执行成功并且下拉列表中的值被成功更新,但是文本框中的值在数据库。

这是我的代码:

protected void BtnSavePersonal_Click(object sender, EventArgs e)
{
    //    // inserting into database
    conn = new SqlConnection();
    conn.ConnectionString = connString;

    string query = "UPDATE PersonalInfoTable SET cell = @cell, email = @email, city = @city, domprov = @domprov, domcity = @domcity, address = @address, religon = @religon, gender = @gender, occupation = @occupation, disability = @disability, occupation = @occupation WHERE cnic='" + Session["cnic"] + "'";

    SqlCommand cmd = new SqlCommand(query, conn);
    cmd.Parameters.AddWithValue("@cell", txtCell.Text);
    cmd.Parameters.AddWithValue("@email", txtEmail.Text);
    cmd.Parameters.AddWithValue("@city", txtCity.Text);
    cmd.Parameters.AddWithValue("@domprov", dropDomProv.Text);
    cmd.Parameters.AddWithValue("@domcity", dropDomCity.Text);
    cmd.Parameters.AddWithValue("@address", txtAddr.Text);
    cmd.Parameters.AddWithValue("@religon", dropReligon.Text);
    cmd.Parameters.AddWithValue("@gender", dropGender.Text);
    cmd.Parameters.AddWithValue("@occupation", txtOcc.Text);
    cmd.Parameters.AddWithValue("@disability", dropDisable.Text);
    cmd.Parameters.AddWithValue("@orphan", dropOrphan.Text);

    Session["cnic"] = txtCnic.Text;

    try
    {
        conn.Open();
        Console.WriteLine(query);
        cmd.ExecuteNonQuery();
        Response.Redirect("Candidate Portal.aspx");
        Response.Write("<script language=javascript>alert('Registration Successful.')</script>");
        personalFill();
    } // try
    catch (SqlException ex)
    {
        Response.Write("<script language=javascript>alert('Registration Failed.')</script>");
    } // catch
    finally
    {
        conn.Close();
    }
}

另一个问题是,一旦我将下拉列表中的值保存到数据库中,我希望禁用某些下拉列表(即省、市、区),以便用户无法再次编辑该信息。我尝试了以下方法:

protected void editFalse()
{
    txtName.Enabled = false; txtFName.Enabled = false; txtCnic.Enabled = false; txtDOB.Enabled = false;

    while (dropDomProv.SelectedItem.ToString() != "-- Select --")
    {
        dropDomProv.Enabled = false;
    }

    while (dropDomCity.SelectedItem.ToString() != "-- Select --")
    {
        dropDomCity.Enabled = false;
    }

    while (dropReligon.SelectedItem.ToString() != "-- Select --")
    {
        dropReligon.Enabled = false;
    }

    while (dropDomProv.SelectedItem.ToString() != "-- Select --")
    {
        dropGender.Enabled = false;
    }
}

文本框被禁用,但下拉菜单没有。我也尝试用 if 替换 while 但这也不起作用。

我解决了。原来问题是我缺少页面加载功能中的回发检查。因此,更新查询中的值被数据库中已经存在的值删除,结果给我空白值。我刚刚添加了

if(!Page.IsPostBack)
{
}

到页面加载功能,并添加了从数据库获取值并禁用其中的下拉菜单的功能。解决了我的两个问题。