最近在学习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列