单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段

Posted

技术标签:

【中文标题】单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段【英文标题】:Rows in sql server db being deleted once I click update. the id is only field that has data 【发布时间】:2015-05-11 17:41:01 【问题描述】:

我终于克服了这些错误,但现在我遇到了我的数据库没有用我的 DataGridView 数据更新的问题。不知道为什么不更新。

protected void gvKeyPersonnel_RowUpdating(object sender, EventArgs e)

    using (SqlCommand cmd = new SqlCommand())
    
        cmd.Connection = conn;
        conn.Open();
        // SqlDataReader myReader = null;
        // myReader = cmd.ExecuteReader();
        
        
        foreach (GridViewRow row in gvKeyPersonnel.Rows)
        
            
            cmd.Parameters.Clear();
            cmd.CommandText = @"UPDATE SP2010_EDCStaffing_AppDB.dbo.CMS_Key_Personnel  SET  Name = @Name, VDCIDIQ = @VDCIDIQ, VDCFFS = @VDCFFS, VDCHIM = @VDCHIM, VDCWEBHOSTING = @VDCWEBHOSTING, VDCCWF = @VDCCWF WHERE ID = @id";
                                
            cmd.Parameters.AddWithValue("@id", Convert.ToInt32(gvKeyPersonnel.DataKeys[row.RowIndex].Values[0]));
            
            cmd.Parameters.AddWithValue("@Name", row.Cells[1].Text);
            cmd.Parameters.AddWithValue("@VDCIDIQ", row.Cells[2].Text);
            cmd.Parameters.AddWithValue("@VDCFFS", row.Cells[3].Text);
            cmd.Parameters.AddWithValue("@VDCHIM", row.Cells[4].Text);
            cmd.Parameters.AddWithValue("@VDCWEBHOSTING", row.Cells[5].Text);
            cmd.Parameters.AddWithValue("@VDCCWF", row.Cells[6].Text);
            cmd.ExecuteNonQuery();
        
        conn.Close();
    

【问题讨论】:

你为什么要int @id = Convert.ToInt32(gvKeyPersonnel.DataKeys[row.RowIndex].Values[0]);?这不会将参数添加到您的命令对象,而是对 cmd.Paramaters.AddWithValue("@id", Convert.ToInt32(gvKeyPersonnel.DataKeys[row.RowIndex].Values[0])); 执行类似的操作 @name 参数。 你需要谷歌 msdn command.Parameters.Add 方法使用参数化查询也将你所有的执行代码包装在一个 trycatch 你不需要调用 conn.Close(); 时为你使用的句柄做自动处理 它不喜欢“参数”。我需要先设置一些东西吗? 除了之前评论者提出的担忧之外,您确定Values[1] 存在吗? 克服了参数错误。但仍然获得 OOR 范围。 【参考方案1】:

cmd.CommandText = @"UPDATE 

不需要@就行了

cmd.CommandText = "UPDATE 

并确保您与数据库的连接由以下人员打开

conn.Open();

【讨论】:

以上是关于单击更新后,sql server db中的行将被删除。 id 是唯一有数据的字段的主要内容,如果未能解决你的问题,请参考以下文章

从 sql server 获取选定的值到 php 中的下拉列表

在本地使用数据库时应该首选哪个数据库 - Access DB 或 Sql Server DB? [关闭]

当我在gridview中有复选框时如何更新SQL Server中的数据库?

视图定义未在 SQL Server 中更新

更新后触发并更新到 SQL Server 中的行

如何使用 C# 从 SQL Server 数据库中逐行将数据检索到 datagridview 中