跨server 分布式事务

 

        public bool SaveLaserLog(Employee User, string ComputerName, string PAModelName, string ModulePartNo, string SnoModelID, ref string msg)

        {

            if (objConn.State != ConnectionState.Open)

            {

                objConn.Open();

            }

            if (objEDIConn.State != ConnectionState.Open)

            {

                objEDIConn.Open();

            }

            SqlTransaction transaction = objConn.BeginTransaction("SaveLaserLog");

            SqlTransaction transactionEDI = objEDIConn.BeginTransaction("SaveLaserLog");

 

            DataSet ds = new DataSet();

            SqlParameter[] paras = new SqlParameter[6];

            paras[0] = new SqlParameter("SNO", SqlDbType.VarChar);

            paras[0].Value = _customno;

            paras[1] = new SqlParameter("DNModelName", SqlDbType.VarChar);

            paras[1].Value = PAModelName;

            paras[2] = new SqlParameter("PartNo", SqlDbType.VarChar);

            paras[2].Value = ModulePartNo;

            paras[3] = new SqlParameter("FAModelId", SqlDbType.VarChar);

            paras[3].Value = SnoModelID;

            paras[4] = new SqlParameter("UserId", SqlDbType.VarChar);

            paras[4].Value = Program.objDB.gEmployee.Id;

            paras[5] = new SqlParameter("PdLine", SqlDbType.VarChar);

            paras[5].Value = Program.objDB.gEmployee.PdLine;

 

            try

            {

                ds = SqlHelper.ExecuteDataset(objConn, transaction, CommandType.StoredProcedure, "dbo.uspLaserMarkAndPackAssemble", paras);

                if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)

                {

                    if (ds.Tables[0].Rows[0]["RetCode"].ToString().Trim() == "0")

                    {

                        msg = (ds.Tables[0].Rows[0]["Msg"].ToString());

                    }

                    else

                    {

                        msg = (ds.Tables[0].Rows[0]["Msg"].ToString());

                        transaction.Rollback();

                        return false;

                    }

                }

                else

                {

                    msg = "lost return rows while SaveLaserLog";

                    transaction.Rollback();

                    return false;

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine("Commit Exception Type: {0}", ex.GetType());

                Console.WriteLine("  Message: {0}", ex.Message);

                try

                {

                    transaction.Rollback();

                }

                catch (Exception ex2)

                {

                    Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());

                    Console.WriteLine("  Message: {0}", ex2.Message);

                }

                return false;

            }

 

            DataSet dsEDI = new DataSet();

            SqlParameter[] parasEDI = { new SqlParameter("@DeliveryNo", SqlDbType.VarChar, 20) ,

                                    new SqlParameter("@LineItem", SqlDbType.VarChar, 10) ,

                                    new SqlParameter("@MPN", SqlDbType.VarChar, 50) ,

                                    new SqlParameter("@Sno", SqlDbType.VarChar, 20) ,

                                    new SqlParameter("@MbSno", SqlDbType.VarChar, 12) ,

                                    new SqlParameter("@UserId", SqlDbType.VarChar, 6) ,

                                    new SqlParameter("@PersonFlag", SqlDbType.VarChar,1) ,

                                    new SqlParameter("@ComputerName", SqlDbType.VarChar,20)};

            parasEDI[0].Value = DN.DeliveryNo;

            parasEDI[1].Value = DN.LineItem;

            parasEDI[2].Value = _mpn;

            parasEDI[3].Value = _customno;

            parasEDI[4].Value = _sno;

            parasEDI[5].Value = User.Id;

            parasEDI[6].Value = "Y";

            parasEDI[7].Value = ComputerName;

            try

            {

                dsEDI = SqlHelper.ExecuteDataset(objEDIConn, transactionEDI, CommandType.StoredProcedure, "uspLaserSave", parasEDI);

                if (dsEDI.Tables.Count > 0 && dsEDI.Tables[0].Rows.Count > 0)

                {

                    string returnCode = dsEDI.Tables[0].Rows[0][0].ToString();

                    if (returnCode == "0")

                    {

                        DN_OutQty = Convert.ToInt32(dsEDI.Tables[0].Rows[0]["OutQty"].ToString());

                        msg = _customno + " save completed.";

                        transactionEDI.Commit();

                        transaction.Commit();

                        return true;

                    }

                    else

                    {

                        msg = dsEDI.Tables[0].Rows[0]["Msg"].ToString();

                        transaction.Rollback();

                        transactionEDI.Rollback();

                        return false;

                    }

                }

                else

                {

                    msg = "lost return rows while SaveLaserLog";

                    transaction.Rollback();

                    transactionEDI.Rollback();

                    return false;

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine("Commit Exception Type: {0}", ex.GetType());

                Console.WriteLine("  Message: {0}", ex.Message);

                try

                {

                    transaction.Rollback();

                    transactionEDI.Rollback();

                }

                catch (Exception ex2)

                {

                    Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());

                    Console.WriteLine("  Message: {0}", ex2.Message);

                }

                return false;

            }

        }

posted @ 2014-06-05 14:14  山峰旺旺  阅读(211)  评论(0)    收藏  举报