c# - 更新查询成功但在 SQL Server 数据库中获取空白值
问题描述
我正在尝试在 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 但这也不起作用。
解决方案
我解决了。原来问题是我在页面加载功能中缺少回发检查。因此,更新查询中的值被数据库中已经存在的值删除,结果给了我空白值。我刚刚添加了
if(!Page.IsPostBack)
{
}
到 pageload 函数并添加了从数据库获取值并禁用其中的下拉菜单的函数。解决了我的两个问题。
推荐阅读
- python - 如何使用 Python 搜索大型(最大 50GB)排序的二进制文件?
- javascript - 具有灵活长度的多维对象数组中的笛卡尔积(所有组合)
- javascript - 如何在任何页面重定向请求之前调用 JS 函数?
- ios - 将字符串列表添加到 Realm 托管对象会导致应用程序在启动时崩溃
- mysql - MySQL备份/复制策略——最小化停机时间和最小化数据丢失
- flutter - FirebaseAnalytics logEvent 通过每次在 Flutter 中创建一个新实例
- angular - 更新 API 请求的可观察值
- python - DRF密码休息工作流程抛出django.template.exceptions.TemplateDoesNotExist
- swift - 跨继承共享实例
- c# - 附加信息:在预期条件的上下文中指定的非布尔类型的表达式,近: