C# 更新查询成功,但在SQL Server数据库中获取空值

C# 更新查询成功,但在SQL Server数据库中获取空值,c#,asp.net,sql-server,database-connection,C#,Asp.net,Sql Server,Database Connection,我正在尝试在ASP.NET中创建一个工作门户,它从用户那里获取个人信息并将其存储到数据库中 数据库表包含以下列 name, fathername, nic, cell, email, city, province, district, dob, address, disability, orphan 注册时,用户仅输入(姓名、父姓名、单元格、cnic、dob)的值。在用户成功注册后,他们必须登录,然后才能进入门户。门户有一个tabcontainer,其中“个人信息”选项卡包含用户的个人信

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

数据库表包含以下列

 name, fathername, nic, cell, email, city, province, district, dob, 
 address, disability, orphan
注册时,用户仅输入(姓名、父姓名、单元格、cnic、dob)的值。在用户成功注册后,他们必须登录,然后才能进入门户。门户有一个tabcontainer,其中“个人信息”选项卡包含用户的个人信息。注册时输入的信息已显示在文本框中,其余信息将使用文本框和下拉列表输入

问题是,当我尝试使用更新查询输入剩余信息时,查询成功执行,DropDownList中的值成功更新,但文本框中的值在数据库中保存为空值

这是我的代码:

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();
    }
}

texbox将被禁用,但下拉列表未被禁用。我还试着用if替换while,但也没用。

我解决了这个问题。问题是我在pageload函数中缺少回发检查。因此,数据库中已经存在的值删除了更新查询中的值,结果为空值。我刚刚添加了

if(!Page.IsPostBack)
{
}

添加到pageload函数,并添加了从数据库获取值和禁用其中下拉列表的函数。解决了我的两个问题。

在UPDATE语句之前,尝试在顶部写入会话变量。由于C#是一种自上而下的编程语言,因此更新查询可能无法识别会话变量。要禁用下拉列表,可以使用jquery。您可以获取下拉列表的id,并在提交单击时添加“禁用”属性。看看这是否有帮助。@RohanRao但是下拉列表中的值在数据库中被更新了,问题只在于文本框。因此,我认为会话变量正在被识别,或者它不会更新任何内容。相关-不要使用while循环检查下拉列表中的单个值。如果它不等于--SELECT--,那么您就处于一个无止境的循环中。把它改成IF,看看会发生什么。@JMabee我用IF试过了,它也不能用。
if(!Page.IsPostBack)
{
}