事务应用,请高手指教
类中有三个方法,分别通过参数执行SQL插入
怎么把这三个方法做到事务中,因为这三个插入是有关联的,一个不成功,都不成功
public string AddOrderInfo(Conn cn, string p_strXml)
{
try
{
AddOrder(conn,p_strXml);
AddOrderSeg(conn,p_strXml);
AddCuster(conn,p_strXml);
}
catch
{
}
}
如果分配给命令的连接位于本地挂起事务中,ExecuteScalar 要求命令拥有事务。命令的 Transaction 属性尚未初始化。
public void AddOrder(SqlConnection cn, string p_strXml)
{
//源码类似AddCuster方法
}
public void AddOrderSeg(SqlConnection cn, string p_strXml)
{
//源码类似AddCuster方法
}
public void AddCuster(SqlConnection cn, string p_strXml)
{
string strSql = "insert into bb_OrderCusts (numOrderId,vcPerName,vcIdentCardNo) values (@numOrderId,@vcPerName,@vcIdentCardNo)";
SqlCommand cmd = new SqlCommand(strSql, cn);
cmd.Parameters.Add("@numOrderId", SqlDbType.Int).Value = Convert.ToInt32(iid);
cmd.Parameters.Add("@vcPerName", SqlDbType.VarChar).Value = np.FindTextByPath("//eg/Custer/rec/PerName");
cmd.Parameters.Add("@vcIdentCardNo", SqlDbType.VarChar).Value = np.FindTextByPath("//eg/Custer/rec/IdentCardNo");
cmd.ExecuteNonQuery();
}
------解决方案--------------------用存储过程的事务多方便呀
------解决方案--------------------C# code
public string AddOrderInfo(Conn cn, string p_strXml)
{
try
{
using(TransactionScope scope=new TransactionScope ())
{
AddOrder(conn,p_strXml);
AddOrderSeg(conn,p_strXml);
AddCuster(conn,p_strXml);
}
}
catch
{
}
}