c# - Asp.net C# SQL Server 更新查询不适用于所有列

标签 c# sql asp.net sql-server

我有一个表单可以编辑数据库中的信息。首先,我使用 URL 参数查询数据库以获取记录并将其显示在文本框中,以便我可以更新它们。这部分代码有效,问题是当我在更改文本框上的内容后按提交更新数据时。仅更新 LastMod 列。我认为 page_load 会触发两次,并在按钮单击事件触发之前覆盖文本框中的内容。

这是代码。

public partial class Edit : System.Web.UI.Page
{
    int aID;
    SqlConnection conn = new SqlConnection(@connectionstring);

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        { 
            conn.Open();
            aID = Convert.ToInt16(Request.QueryString["ID"]);
            string sql = "select * from Contacts where ID = '" + aID + "' ";

            SqlDataAdapter adap = new SqlDataAdapter(sql, conn);
            DataSet ds = new DataSet();

            adap.Fill(ds);

            txtFName.Text = ds.Tables[0].Rows[0]["Fname"].ToString();
            txtLName.Text = ds.Tables[0].Rows[0]["Lname"].ToString();
            txtEmail.Text = ds.Tables[0].Rows[0]["EmailAdd"].ToString();
            lblLastMod.Text = ds.Tables[0].Rows[0]["LastMod"].ToString();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
            DateTime date = DateTime.Now;
            SqlCommand sqlComm = new SqlCommand();
            sqlComm = conn.CreateCommand();

            sqlComm.CommandText = @"UPDATE Contacts SET Fname=@FName, Lname = @LName, EmailAdd = @Eadd,LastMod = @LMod WHERE ID=@ID";
            sqlComm.Parameters.Add("@FName", SqlDbType.NChar);
            sqlComm.Parameters["@FName"].Value = txtFName.Text.Trim();
            sqlComm.Parameters.Add("@LName", SqlDbType.NChar);
            sqlComm.Parameters["@LName"].Value = txtLName.Text.Trim();
            sqlComm.Parameters.Add("@Eadd", SqlDbType.NChar);
            sqlComm.Parameters["@Eadd"].Value = txtEmail.Text.Trim();
            sqlComm.Parameters.Add("@LMod", SqlDbType.DateTime);
            sqlComm.Parameters["@LMod"].Value = date;
            sqlComm.Parameters.Add("@ID", SqlDbType.Int);
            sqlComm.Parameters["@ID"].Value = aID;

            conn.Open();
            sqlComm.ExecuteNonQuery();
            conn.Close();
    }
}

我尝试在 Page_Load 方法中添加 !IsPostback,但没有任何更新,甚至连 LastMod 记录也没有更新。

感谢您给我提供的任何帮助。

最佳答案

您在页面顶部声明一个变量 aID,并在页面加载时为其设置一个值。然后您也在点击中使用它,但您从未重新设置它。因此,对于回发来说,它没有值(value)。将其移至“如果不是 ispostback”上方的页面加载

protected void Page_Load(object sender, EventArgs e)
    {
       aID = Convert.ToInt16(Request.QueryString["ID"]);
        if (!IsPostBack)
        { 
            conn.Open();

            string sql = "select * from Contacts where ID = '" + aID + "' ";

关于c# - Asp.net C# SQL Server 更新查询不适用于所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233534/

相关文章:

c# - 如何使用 linq 进行异步

c# - UWP 中的绑定(bind)未设置附加行为属性

c# - 为什么我用 VS 2019 构建的 C# 应用程序不能在另一台计算机上运行?

Mysql 更新查询与内表连接

sql - 什么会导致我的客户端服务器上的高缓冲区 I/O?

mysql - 如何减去一最大列和一最小列?

c# - 意想不到的透明度而不是白色

C#.NET连接主机mysql数据库

c# - 从 sql server 获取顶部(开始号,结束号)行

c# - .NET 在为 WCF 服务生成类型时加载寻找另一个版本的程序集