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; } }
/// <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(); } } }
/// <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; } }