You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用传入ID匹配数据表行?存储过程更新数据问题咨询

通过ID匹配实现数据修改(Windows窗体+SQL Server)

一、修正存储过程

你当前的存储过程存在逻辑错误:INSERT语句用于插入新数据,不能搭配WHERE条件;要修改已有数据,必须使用UPDATE语句,通过@ID参数匹配数据表中的ID字段定位要修改的行。修正后的存储过程如下:

ALTER PROCEDURE spData_Audit
    @ID int,
    @Name varchar(100),
    @Description varchar(3000), 
    @AdditionalInformation varchar(3000) = NULL
AS
BEGIN
    SET NOCOUNT ON;

    -- 通过ID匹配更新指定行
    UPDATE dbo.Data
    SET 
        Name = @Name,
        Description = @Description,
        -- 如果传入的AdditionalInformation为NULL,保留原字段值
        AdditionalInformation = ISNULL(@AdditionalInformation, AdditionalInformation)
    WHERE ID = @ID;
END

二、Windows窗体端实现步骤

  1. 保存选中行的ID:当用户从DataGrid选中行并打开编辑窗体时,将该行的ID值存储到编辑窗体的隐藏控件(如TextBox,设置Visible = false)或私有变量中,确保用户无法修改。
  2. 加载编辑数据:编辑窗体初始化时,除了给显示用的文本框填充Name、Description等数据,同时把ID赋值给隐藏控件/变量。
  3. 调用存储过程保存修改:用户点击保存按钮时,创建数据库连接,调用修正后的spData_Audit存储过程,传入ID和修改后的其他参数。

以下是C#代码示例:

private void btnSave_Click(object sender, EventArgs e)
{
    // 从隐藏控件获取不可修改的ID
    int targetId = int.Parse(txtHiddenID.Text);
    // 获取用户修改后的字段值
    string newName = txtName.Text.Trim();
    string newDesc = txtDescription.Text.Trim();
    string newAdditionalInfo = txtAdditionalInfo.Text.Trim() == "" ? null : txtAdditionalInfo.Text.Trim();

    // 替换为你的数据库连接字符串
    string connectionString = "Server=你的服务器地址;Database=你的数据库名;Integrated Security=True;";

    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        using (SqlCommand cmd = new SqlCommand("spData_Audit", conn))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            // 添加存储过程参数
            cmd.Parameters.AddWithValue("@ID", targetId);
            cmd.Parameters.AddWithValue("@Name", newName);
            cmd.Parameters.AddWithValue("@Description", newDesc);
            // 处理可选参数,若为NULL则传入DBNull.Value
            cmd.Parameters.AddWithValue("@AdditionalInformation", newAdditionalInfo ?? DBNull.Value);

            int affectedRows = cmd.ExecuteNonQuery();
            if (affectedRows > 0)
            {
                MessageBox.Show("数据更新成功");
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            else
            {
                MessageBox.Show("未找到匹配ID的数据,更新失败");
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 21:35:18