【ASP.NET】关于ADO.NET数据更新机制--我的理解

最近在学习ASP.NET…这只是个人笔记。

以DELETE操作为例


1、操作DataSet阶段:
删除DataSet中的数据,无论用什么方法查找都没问题,但删除时必须调用DataRow.Delete()。


2、DataSet->DataAdapter->数据库阶段:
DataAdapter根据自身的DeleteCommand属性来决定真正更新到数据库的操作。

有如下情况:
①DeleteCommand的SQL语句不带参数,则与第一阶段DataSet的操作毫无关系。
即不管DataSet中出现什么改变,都只按照SQL语句的内容执行。
例如,  "delete Test_Chara where CharaID='0001';"  ——则就算DataSet中将所有行都删除了,最终数据库中删除的也将只是“CharaID='0001'”的行。

②DeleteCommand的SQL语句带有参数,则测试第一阶段中使用DataRow.Delete()方法删除的行,如果该行与参数对应的字段符合条件,则删除,否则不改变。
即:“使用DataRow.Delete()方法删除”的行不合条件,不删除。
    没有“使用DataRow.Delete()方法删除”的行不测试,当然也不删除。
    只有“使用DataRow.Delete()方法删除”且“测试结果符合要求”的行才会删除。
例如,  "delete Test_Chara where CharaID=@id;"  ——则会将所有“使用DataRow.Delete方法删除的行”的CharaID字段值与参数"@id"进行对比,相等则删除,否则不改变数据库中的内容。


--------------------------------------------------------------------------------------------------
总结: DataRow.Delete()方法删除的是DataSet中的数据,与数据库的数据没有半点关系。
adp.Update(dataSet, "Test_Chara")方法是最终修改数据库的方法,如果带参数则将会用“使用DataRow.Delete()删除”来测试条件。


--------------------------------------------------------------------------------------------------
注:参数应在添加参数时绑定对应的列。
例如:
        SqlCommand deleteComm = new SqlCommand("delete Test_Chara where CharaID=@id;");
        deleteComm.Parameters.Add("@id", SqlDbType.NVarChar, 50, "CharaID");//将"@id"绑定到CharaID列

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值