【问题标题】:Update query successful but getting blank values in SQL Server database更新查询成功但在 SQL Server 数据库中获取空白值
【发布时间】:2019-12-11 05:24:31
【问题描述】:

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

数据库表有这些列

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

在注册时,用户只输入(name、fathername、cell、cnic、dob)的值。用户成功注册后,他们必须登录并将他们带到门户网站。门户有一个标签容器,其中个人信息标签包含来自用户的个人信息。注册时输入的信息已显示在文本框中,其余信息将使用文本框和下拉列表输入。

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

这是我的代码:

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

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

【问题讨论】:

  • 尝试在 UPDATE 语句之前的顶部写入 Session 变量。由于 C# 是一种自上而下的编程语言,因此您的 UPDATE 查询可能无法识别 Session 变量。要禁用下拉列表,您可以使用 jquery。您可以获取下拉列表的 ID,然后在提交单击时添加“禁用”属性。看看这是否有帮助。
  • @RohanRao 但下拉列表中的值已在数据库中更新,问题仅出在文本框上。所以我认为会话变量正在被识别或者它不会更新任何东西。
  • 相关 - 不要使用addwithvalue
  • 您正在使用 while 循环来检查下拉列表的单个值。如果它不等于“-- SELECT --”,那么您将处于无限循环中。将其更改为 IF,看看会发生什么。
  • @JMabee 我试过如果,它也不起作用。

标签: c# asp.net sql-server database-connection


【解决方案1】:

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

if(!Page.IsPostBack)
{
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2019-02-08
    • 1970-01-01
    相关资源
    最近更新 更多