Пример #1
0
 public object ExecuteCommand(ExecuteTypes returnType, SqlCommand cmd)
 {
     switch (returnType)
     {
         case ExecuteTypes.NonQuery:
             this.ExecuteNonQuery(cmd);
             return null;
         case ExecuteTypes.Scalar:
             return this.ExecuteScalar(cmd);
         case ExecuteTypes.Table:
             return this.ExecuteQuery(cmd);
         default:
             return null;
     }
 }
Пример #2
0
        /// <summary>
        /// Execute a list of script buffers under transaction mode.
        /// </summary>
        /// <param name="buffers"></param>
        /// <param name="isolationLevel"></param>
        /// <param name="executeType"></param>
        public void ExecuteBufferTran(string[] buffers, IsolationLevel?isolationLevel, ExecuteTypes executeType)
        {
            #region Sanity Checks
            if ((buffers == null) || (buffers.Length == 0))
            {
                throw new ArgumentNullException("buffers");
            }
            #endregion

            DbConnection  conn = null;
            DbTransaction tran = null;

            try
            {
                conn = dataFactory.GetConnection(ConnectionString);
                conn.Open();

                if (!isolationLevel.HasValue)
                {
                    tran = conn.BeginTransaction();
                }
                else
                {
                    tran = conn.BeginTransaction(isolationLevel.Value);
                }

                for (int i = 0; i < buffers.Length; i++)
                {
                    string query = buffers[i];

                    if (String.IsNullOrEmpty(query))
                    {
                        continue;
                    }

                    // split the script out on the 'GO' statement
                    string[] subQueries = breakStatements(query);

                    //string[] subQueries;
                    //{
                    //    string findToken = String.Format("{0}{1}{0}", Environment.NewLine, "GO");
                    //    //string replToken = String.Format("{0}{1}{0}", Environment.NewLine, "-- GO");
                    //    subQueries = query.Split(new string[] { findToken },  StringSplitOptions.RemoveEmptyEntries);
                    //}

                    try
                    {
                        for (int j = 0; j < subQueries.Length; j++)
                        {
                            string subQuery = subQueries[j];
                            switch (executeType)
                            {
                            case ExecuteTypes.ExecuteNonQuery:
                                dataFactory.ExecuteNonQuery(subQuery, conn, tran);
                                break;

                            case ExecuteTypes.ExecuteScalar:
                                dataFactory.ExecuteScalar(subQuery, conn, tran);
                                break;

                            default:
                                throw new ArgumentOutOfRangeException("executeType=" + executeType);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        // wrap error with filename info.
                        Exception ex2 = new ApplicationException("Buffer index " + i, ex);
                        ex2.Data.Add("index", i);
                        throw ex2;
                    }
                }

                tran.Commit();
                conn.Close();
            }
            catch (Exception ex)
            {
                if (tran != null)
                {
                    tran.Rollback();
                }
                Debug.WriteLine(ex.Message);
                throw;
            }
            finally
            {
                if (tran != null)
                {
                    tran.Dispose();
                }

                if (conn != null)
                {
                    conn.Dispose();
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Execute a list of script files under transaction mode.
        /// </summary>
        /// <param name="filenames"></param>
        /// <param name="isolationLevel"></param>
        /// <param name="executeType"></param>
        public void ExecuteFileTran(string[] filenames, IsolationLevel?isolationLevel, ExecuteTypes executeType)
        {
            #region Sanity Checks
            if ((filenames == null) || (filenames.Length == 0))
            {
                throw new ArgumentNullException("filenames");
            }
            #endregion

            try
            {
                List <String> buffers = new List <string>();

                for (int i = 0; i < filenames.Length; i++)
                {
                    buffers.Add(StringUtil.StringArrayToString(FileUtil.ReadFile(filenames[i])));
                }

                try
                {
                    ExecuteBufferTran(buffers.ToArray(), isolationLevel, executeType);
                }
                catch (Exception ex)
                {
                    // wrap more error
                    int idx = int.Parse(ex.Data["index"].ToString());

                    Exception ex2 = new ApplicationException("Filename index: " + filenames[idx], ex.InnerException);
                    ex2.Data.Add("index", idx);
                    throw ex2;
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw;
            }
        }