如何基于新DataSet绑定重写Delete和Update方法?新增列后Delete失效怎么办?
解决DataSet新增列后Delete方法故障及重写Update/Delete方法
一、排查并修复当前Delete方法故障
- 打开DataSet设计器,找到对应TableAdapter:
- 右键TableAdapter → 配置 → 进入TableAdapter配置向导
- 检查Delete语句是否正确,确保包含主键(Delete需要唯一标识行),无语法错误
- 若自动生成语句有问题,手动修正,比如确保
DELETE FROM [表名] WHERE [主键列] = @原主键值格式正确
- 查看TableAdapter的Delete方法代码:
- 右键DataSet文件 → 查看代码
- 找到自动生成的Delete方法(如
public virtual int Delete(...)),检查参数映射是否正确,无遗漏或错误
- 调试测试:在调用Delete的代码处,确认传入的行数据参数正确,或直接查看DeleteCommand执行时的参数值
二、手动重写Update和Delete方法(基于新DataSet)
1. 自定义Delete方法
避免依赖自动生成代码,在TableAdapter的部分类中扩展:
public partial class YourTableAdapter { public int CustomDelete(int primaryKey) { string sql = "DELETE FROM YourTableName WHERE PrimaryKeyColumn = @Id"; using (SqlCommand cmd = new SqlCommand(sql, this.Connection)) { cmd.Parameters.AddWithValue("@Id", primaryKey); if (this.Connection.State != ConnectionState.Open) this.Connection.Open(); int rowsAffected = cmd.ExecuteNonQuery(); this.Connection.Close(); return rowsAffected; } } }
2. 重写Update方法
方法一:修改自动生成的UpdateCommand
- 在DataSet设计器中选中TableAdapter的UpdateCommand
- 在属性窗口修改CommandText,确保包含新增列的更新逻辑,比如:
UPDATE [表名] SET [列1] = @列1, [新增列] = @新增列 WHERE [主键列] = @原主键列 - 检查参数映射,确保每个参数对应DataTable的列
方法二:自定义Update方法
public partial class YourTableAdapter { public int CustomUpdate(YourDataRow row) { string sql = "UPDATE YourTableName SET Column1 = @Col1, NewColumn = @NewCol WHERE PrimaryKey = @Id"; using (SqlCommand cmd = new SqlCommand(sql, this.Connection)) { cmd.Parameters.AddWithValue("@Col1", row.Column1); cmd.Parameters.AddWithValue("@NewCol", row.NewColumn); cmd.Parameters.AddWithValue("@Id", row.PrimaryKey); if (this.Connection.State != ConnectionState.Open) this.Connection.Open(); int rowsAffected = cmd.ExecuteNonQuery(); this.Connection.Close(); return rowsAffected; } } }
三、避免自定义逻辑被覆盖的注意事项
- 不要直接修改DataSet自动生成的代码文件(如
DataSetName.Designer.cs),VS重写更新方法时会覆盖该文件内容 - 所有自定义逻辑放在部分类中,单独创建
YourTableAdapter.cs文件,用partial class扩展TableAdapter - 更新DataSet结构时,配置TableAdapter时仔细检查自动生成的SQL语句,确认无误后再保存
内容的提问来源于stack exchange,提问作者Amirhessam Pourhossein
相关产品推荐
相关产品推荐

