或者如下的组合:
1)
A:插入数据到MSSQL
B:插入记录到XML
2)
A:插入数据到XML1
B:插入数据到XML2
3)
A:创建XML文件1
B:插入数据到XML2
//请问以上组合中,如果B出现异常的时候,
怎么让上面操作回滚?
1)
A:插入数据到MSSQL
B:插入记录到XML
2)
A:插入数据到XML1
B:插入数据到XML2
3)
A:创建XML文件1
B:插入数据到XML2
//请问以上组合中,如果B出现异常的时候,
怎么让上面操作回滚?
如果用DataSet来临时存取的话
1.你的意思是将记录读到DataSet中,再在里边添加记录,
然后再复写入XML?
如果是这样的话,写入的过程中,依然有一个先后的问题,
如果写入XML1的时候,没有异常,而写入2)的时候,出现
异常,这样的话,回滚不了吧?2)如果读到DataSet中处理的话,在数据量大的时候,
占用的内存应该比较大。3)对于创建文件,不能用DataSet来解决吧?
//这两个只能说是对没有插入到XML文件以前,在DataSet中
的数据进行回滚。比如:
DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();
try
{
ds1.ReadXML(path);
ds2.ReadXML(path); //这里是修改代码
ds1.AcceptChanges();
ds2.AcceptChanges();
ds1.WriteXml(path);
ds2.WriteXml(path);}
catch(Exception ex)
{
//如果在ds2.WriteXml(path);这里报异常
//用RejectChanges回滚不了吧?
}
//如果到ds2.WriteXml(path);的时候,不是报异常,
而是忽然中断呢?又怎么回滚?
在XML里每一行加一个标识<Flag>0</Flag>
为0的时候,不可用,为1的时候可用,当出现异常时,删除不可用的记录,
如果突然中断,也不会有影响,因为记录是标识无效的,
当下次异常的时候,就会把这次无效的记录删除。//不好的地方在于,每个文件都要加一个<Flag>0</Flag>
各位看官是否有更好的解决方案?