现在的位置: 首页 > 综合 > 正文

ExecuteTransaction

2013年11月30日 ⁄ 综合 ⁄ 共 5783字 ⁄ 字号 评论关闭

 public static bool ExecuteTransaction(ArrayList cmdList)
       

 {
           

    Database db = DatabaseFactory.CreateDatabase();
           

    bool rtn = false;

           

    using (DbConnection con = db.CreateConnection())
           

      {
               

         con.Open();
               

         DbTransaction trans = con.BeginTransaction();


         try
          

          {
                   

             int count = 0;
           

             count = cmdList.Count;

        

             DbCommand cmd;
           

             for (int i = 0; i < count; i++)
 

                 {
           

                    cmd = (DbCommand)cmdList[i];

    

                    if (cmd != null)
    

                        db.ExecuteNonQuery(cmd, trans);
 

                  }



                    trans.Commit();
      

                   rtn = true;
       

           }
          

           catch
         

           {
            

              trans.Rollback();
          

              rtn = false;
          

           }

           

           con.Close();
 

       }

         

      return rtn;

  

}

 

            //执行命令
            ArrayList cmdList = new ArrayList();

            //删除PurchaseOrder
            cmdList.Add(DbHelper.GetDbCommand(this.pageId, SQL002, param));

            //执行事物
           bool ret = DbHelper.ExecuteTransaction(cmdList); 

public static DbCommand GetDbCommand(string pageId, string sqlId, ArrayList parmsList)
        {
            if (pageId == null || pageId.Length == 0) throw new ArgumentNullException("pageId");
            if (sqlId == null || sqlId.Length == 0) throw new ArgumentNullException("sqlId");
            if (parmsList == null || parmsList.Count == 0) throw new ArgumentNullException("parmsList");

            Database db = DatabaseFactory.CreateDatabase();
            string sqlString;

 

            //函数开始Log

            try
            {
                sqlString = XmlProcedure.BuildSqlString(pageId, sqlId);

                if (sqlString == null || sqlString.Length == 0)
                    return null;

                DbCommand dbCommand = db.GetSqlStringCommand(sqlString);
                ArrayList xmlParmsList = new ArrayList();

                if (!XmlProcedure.BuildSqlParms(pageId, sqlId, parmsList, ref xmlParmsList))
                {
                    return null;
                }

                foreach (XmlParameter xmlPara in xmlParmsList)
                {
                    db.AddInParameter(dbCommand, xmlPara.ParamName, xmlPara.ParamType, xmlPara.ParamValue);
                }

                //函数结束Log

                return dbCommand;
            }
            catch (Exception ex)
            {

                throw (ex);
            }

        }

public static string BuildSqlString(string pageId, string sqlId)
        {
            XmlDocument xDoc = new XmlDocument();

            string path = "";
            //
            string sqlnode = "";
            //
            string sqlString = "";

            path = xmlpath + pageId + ".xml";
            sqlnode = "/DataFactory/" + sqlId + "/Sql";

            try
            {

                if (!File.Exists(path))
                    return null;

                xDoc.Load(path);

                XmlNode child = xDoc.SelectSingleNode(sqlnode);

                if (child != null)
                {
                    XmlNodeReader nr = new XmlNodeReader(child);
                    while (nr.Read())
                    {
                        if (nr.NodeType == XmlNodeType.CDATA)
                        {
                            sqlString = nr.Value;
                        }
                    }
                }
            }
            catch { }

            return sqlString;

        }

 

public static bool BuildSqlParms(string pageId, string sqlId, ArrayList parmsList, ref ArrayList xmlParmsList)
        {
            XmlDocument xDoc = new XmlDocument();

            string path = "";
            string parmnode = "";

            path = xmlpath + pageId + ".xml";
            parmnode = "/DataFactory/" + sqlId + "/Parameters";

            try
            {

                xDoc.Load(path);

                XmlNode child = xDoc.SelectSingleNode(parmnode);

                if (child != null)
                {
                    XmlNodeReader reader = new XmlNodeReader(child);
                    int index = 0;

                    while (reader.Read())
                    {
                        reader.MoveToContent();
                        if (reader.HasAttributes)
                        {
                            string sqlName1 = "";
                            DbType dbType = new DbType();
                            int length = 0;
                            string direction;

                            for (int i = 0; i < reader.AttributeCount; i++)
                            {
                                reader.MoveToAttribute(i);
                                switch (reader.Name)
                                {
                                    case "SqlName":
                                        sqlName1 = reader.Value;
                                        break;

                                    case "type":
                                        dbType = ConvertDbType(Convert.ToString(reader.Value));
                                        break;

                                    case "length":
                                        length = Convert.ToInt32(reader.Value);
                                        break;
                                    case "direction":
                                        direction = reader.Value;
                                        break;
                                }

                            }
                                   
                            xmlParmsList.Add(new XmlParameter(sqlName1, dbType, parmsList[index]));

                            //Return the reader to the book element.
                            reader.MoveToElement();
                            index = index + 1;
                        }
                    }
                }
                else
                {
                    //
                    return false;
                }
            }
            catch { }

            return true;

        }

抱歉!评论已关闭.