SqlConnection con = new SqlConnection(CommonERP.sqlConStr);
//连接
con.Open();
//实例化事务
SqlTransaction myst = con.BeginTransaction();
try
{
//保存主表数据
int mainResult = DAL.po_purchaseOrder.addPurchaseOrder(myst, obj);
if (mainResult <= 0)
{
myst.Rollback();
con.Close();
}
//循环保存子表数据
for (int i = 0; i < rowAdd.Length; i++)
{
//项次加1
string no = "0" + (maxNo += 1).ToString();
//构造正确项次
no = no.Substring(no.Length - 2);
//项次赋值
rowAdd[i]["poOrderItemNo"] = no;
int itemResult = DAL.po_purchaseOrder.addItem(myst, rowAdd[i], obj.PoOrderNo);
if (itemResult <= 0)
{
myst.Rollback();
con.Close();
return false;
}
}
//提交事务
myst.Commit();
//关闭连接
con.Close();
//返回值
return true;
}
catch
{
myst.Rollback();
con.Close();
return false;
}
我这样写事务,如果子表出错,会回滚主表的操作吗?
//连接
con.Open();
//实例化事务
SqlTransaction myst = con.BeginTransaction();
try
{
//保存主表数据
int mainResult = DAL.po_purchaseOrder.addPurchaseOrder(myst, obj);
if (mainResult <= 0)
{
myst.Rollback();
con.Close();
}
//循环保存子表数据
for (int i = 0; i < rowAdd.Length; i++)
{
//项次加1
string no = "0" + (maxNo += 1).ToString();
//构造正确项次
no = no.Substring(no.Length - 2);
//项次赋值
rowAdd[i]["poOrderItemNo"] = no;
int itemResult = DAL.po_purchaseOrder.addItem(myst, rowAdd[i], obj.PoOrderNo);
if (itemResult <= 0)
{
myst.Rollback();
con.Close();
return false;
}
}
//提交事务
myst.Commit();
//关闭连接
con.Close();
//返回值
return true;
}
catch
{
myst.Rollback();
con.Close();
return false;
}
我这样写事务,如果子表出错,会回滚主表的操作吗?
解决方案 »
- 关于地图API ,求高手指点
- Winform 绘制,控件加载完后绘图会清空,请高手指教
- Winform中的TabControl控件问题.
- List<T> 问题
- 跪求一个小程序的写法
- 什么叫"完全数"?
- java通过socket通讯发送excel文件到c#端,excel文件乱码
- 求救:程序集已经从远程机器上下载, 但是本机运行时却提示:“程序集找不到。”
- 谁能提供“识别条码和条码打印程序”或无需注册的控件也可,高分相送!
- 未处理的“System.OutOfMemoryException”类型的异常出现在 system.windows.forms.dll 中
- C# 运用钩子做虚拟键盘程序,程序崩溃,提示:向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
- 读写文件的问题!!!!!
这个应该是提交子表的数据吧?这种方法不可取,应该一次性和主表一起提交,要么全部成功,要么全失败。
{
myst.Rollback();
con.Close();
}if (itemResult <= 0)
{
myst.Rollback();
con.Close();
return false;
}
这两个判断是多余的.去掉.因为只有事务提交后才会有返回结果.