adapter.RowUpdated += new SqlRowUpdatedEventHandler(OnRowUpdated); 这句话是干嘛用的?
-
【MSDN官方文档说明】
在对数据源执行命令后的 Update 过程中发生。 尝试进行更新,因此激发了该事件。 -
【实现原理】
利用SqlDataAdapter.Update(DataTable) 批量操作数据时(如Insert操作),当没有事物处理时,如果入库出现致命错误(如主键冲突),SQL语句就会停止。如何才能实现SQL语句不停止,继续执行剩下的DataTable入库,这时可利用SqlDataAdapter.RowUpdated事件来实现。
事件是这样定义的:public event SqlRowUpdatedEventHandler RowUpdated。实现原理就是定阅这个事件,当更新某行出错时,清除本行,在回调Insert方法。
adapter.RowUpdated += new SqlRowUpdatedEventHandler(OnRowUpdated);
//OnRowUpdated主要用于插入出错时,是否忽略错误继续更新
protected void OnRowUpdated(object sender, SqlRowUpdatedEventArgs e)
{
// If this is an insert, then skip this row.
if (e.StatementType == StatementType.Insert)
{
e.Status = UpdateStatus.SkipCurrentRow;
}
}
-
【实践经验】
我们在项目实践中如果使用的事务,可以不订阅这个实践,在出错时返回到catch钟,在catch中rollback即可实现事务处理。 -
【数据适配器的事件说明】
• OnRowUpdating:在数据行更新前执行
• OnRowUpdated:在数据行更新后执行。其最佳用法是检查单条更新语句的执行结果。
SqlRowUpdatedEventArgs属性
属性 描述
Command 要执行的数据命令
Errors 错误
Row 要更新的行
StatementType 要执行的命令类型,可能为Select、Insert、Delete和Update
RecordsAffected 要影响的行数
TableMapping 更新所使用的DataTableMapping