public static CreateTransactionScopeConnection ( Database db ) : DbConnection | ||
db | Database | instance of |
return | DbConnection |
/// <summary> /// ADO.NET의 기본 Transaction을 시작한다. (TransactionScope와는 달리 DTC를 이용하지 않는다.) /// </summary> /// <param name="isolationLevel">Transaction 격리수준 (기본적으로 ReadCommitted)</param> /// <returns>Return a new instance of DbTransaction</returns> /// <example> /// <code> /// AdoRepository.BeginTransaction(IsolationLevel.ReadUncommitted); /// try /// { /// DbCommand insertCommand = AdoRepository.GetSqlStringCommand(InsertString); /// DbCommand deleteCommand = AdoRepository.GetSqlStringCommand(DeleteString); /// DbCommand countCommand = AdoRepository.GetSqlStringCommand(CountString); /// /// var count = Convert.ToInt32(AdoRepository.ExecuteScalar(countCommand)); /// /// AdoRepository.ExecuteNonQuery(insertCommand); /// AdoRepository.ExecuteNonQuery(deleteCommand); /// /// AdoRepository.Commit(); /// /// Assert.AreEqual(4, count); /// } /// catch (Exception ex) /// { /// if (IsErrorEnabled) /// log.ErrorException(ex); /// /// AdoRepository.Rollback(); /// /// throw; /// } /// </code> /// </example> public virtual DbTransaction BeginTransaction(System.Data.IsolationLevel isolationLevel) { var connection = AdoTool.CreateTransactionScopeConnection(Db); ActiveTransaction = connection.BeginTransaction(isolationLevel); if (IsDebugEnabled) { log.Debug("Database=[{0}]에 새로운 Transaction을 시작했습니다. Transaction=[{1}]", connection.Database, ActiveTransaction.GetType().FullName); } return(ActiveTransaction); }
/// <summary> /// Command를 실행시켜, 결과 셋을 DataSet에 저장한다.<br/> /// 여러 ResultSet을 반환하는 경우 각각의 ResultSet에 대응하는 TableName을 제공해야 합니다. /// </summary> /// <param name="repository">IAdoRepository 인스턴스</param> /// <param name="cmd">실행할 Command</param> /// <param name="targetDataSet"></param> /// <param name="tableNames"></param> /// <example> /// <code> /// // Region 전체 정보 및 갯수를 가져옵니다. /// string query = "select * from Region; select count(*) from Region"; /// /// DataSet ds = new DataSet(); /// using (DbCommand cmd = Impl.GetSqlStringCommand(query)) /// { /// Impl.LoadDataSet(cmd, ds, new string[] { "Region", "CountOfRegion" }); /// Assert.AreEqual(2, ds.Tables.Count); /// Assert.AreEqual(4, ds.Tables[1].Rows[0][0]); /// } /// </code> /// </example> public static void LoadDataSet(this IAdoRepository repository, DbCommand cmd, DataSet targetDataSet, string[] tableNames) { cmd.ShouldNotBeNull("cmd"); tableNames.ShouldNotBeEmpty("tableNames"); if (IsDebugEnabled) { log.Debug("DbCommand를 실행하여 DataSet에 로등합니다... cmd.CommandText=[{0}], tableNames=[{1}]", cmd.CommandText, tableNames.CollectionToString()); } for (int i = 0; i < tableNames.Length; i++) { tableNames[i].ShouldNotBeWhiteSpace("index=" + i); } if (repository.IsActiveTransaction) { AdoTool.EnlistCommandToActiveTransaction(repository, cmd); } var newConnectionCreated = false; if (cmd.Connection == null) { cmd.Connection = AdoTool.CreateTransactionScopeConnection(repository.Db, ref newConnectionCreated); } using (var adapter = repository.GetDataAdapter()) { for (var j = 0; j < tableNames.Length; j++) { var sourceTable = (j == 0) ? AdoTool.DefaultTableName : (AdoTool.DefaultTableName + j); adapter.TableMappings.Add(sourceTable, tableNames[j]); } adapter.SelectCommand = cmd; adapter.Fill(targetDataSet); if (newConnectionCreated) { AdoTool.ForceCloseConnection(adapter.SelectCommand); } } }