【发布时间】:2014-10-29 13:26:21
【问题描述】:
我需要在运行时设置rowstate属性为deleted,需要修改rowstate Modified为Deleted。
据我所知,row.Delete() 方法调用将行状态更改为已删除,但它也删除了行。
这里我只想将行状态更改为已删除,但不应删除数据行:
示例代码:
Delete delete = new Delete()
.from("tb_lib_report_package_link")
.where()
.add().criteria("lib_report_id = :pLibReportId ")
.and().criteria("package_Id IN (" + packageLink + ")")
.endWhere();
drow.AcceptChanges();
drow.Delete();
DataRow[] dra = new DataRow[] { drow };
DbAccessManager accessManager = DbAccessFactory.GetDatabaseAccess(DatabaseType.Oracle, "Data Source=SRV",
"DEV", "dev", this.AppCookieData["UserId"]);
accessManager.ClientId = this.AppCookieData["UserId"];
DbConnection cn = accessManager.CreateConnection();
delete.ParameterSetter = new ParameterSetter((builder, param, index) =>
{
switch (builder.GetColumnName(param))
{
case "pLibReportId":
param.DbType = this.ServerCfgReader.DefaultDBProvider.DBDataAccess.GetDbType(drow["LIB_REPORT_ID"].GetType());
param.Value = drow["LIB_REPORT_ID"];
break;
default:
throw new NotImplementedException();
}
});
accessManager.Delete(delete, dra, cn);
在此我收到“无法通过该行访问已删除的行信息”的异常。
【问题讨论】:
-
这样做有什么好处?你想在这里达到什么目的?还显示您当前拥有的一些代码。
-
看到这里我只想在运行时将行状态修改为删除。目前我有一个 DataRow,其中行状态已修改,并且基于修改后的行状态,我需要在我的框架中调用 Delete 方法,但框架只处理 Delete 函数中的 Deleted Row 状态。
-
如果您不调用
AcceptChanges,“它也会删除行”是什么意思,它仍保留在数据表中,如果您在变量中有对它的引用,那么您仍然可以通过它关于并访问它的行状态。 -
在运行时我只有 DataRow,当我在 datarow 上调用 Delete() 方法并稍后使用相同的 datarow 时,它抛出异常“'drow.ItemArray' 抛出了类型为“系统”的异常.Data.DeletedRowInaccessibleException"
-
这是我在 datarow 上调用 delete 方法后得到的。已删除的行信息无法通过该行访问。