/// <summary> /// Update DataSet with commands /// </summary> /// <param name="repository">IAdoRepository 인스턴스</param> /// <param name="dataSet">DataSet to update</param> /// <param name="tableName">table name to update</param> /// <param name="insertCommand">command to insert</param> /// <param name="updateCommand">command to update</param> /// <param name="deleteCommand">command to delete</param> /// <param name="updateBehavior">Behavior to update</param> /// <param name="updateBatchSize">batch size to update</param> /// <returns>affected row count</returns> public static int UpdateDataSet(this IAdoRepository repository, DataSet dataSet, string tableName, DbCommand insertCommand = null, DbCommand updateCommand = null, DbCommand deleteCommand = null, UpdateBehavior updateBehavior = UpdateBehavior.Transactional, int updateBatchSize = Int32.MaxValue) { dataSet.ShouldNotBeNull("dataSet"); Guard.Assert(dataSet.Tables.Count > 0, "지정된 DataSet에 DataTable이 하나라도 있어야합니다."); if(tableName.IsWhiteSpace()) tableName = dataSet.Tables[0].TableName; if(tableName.IsWhiteSpace()) tableName = dataSet.Tables[0].TableName = Guid.NewGuid().ToString(); if(repository.IsActiveTransaction) { if(IsDebugEnabled) log.Debug("DataSet에 대해 Transaction 하에서 배치작업을 실행합니다... " + "dataSet=[{0}], tableName=[{1}], insertCommand=[{2}], updateCommand=[{3}], deleteCommand=[{4}], ActiveTransaction=[{5}], updateBatchSize=[{6}]", dataSet.DataSetName, tableName, insertCommand != null ? insertCommand.CommandText : "NULL", updateCommand != null ? updateCommand.CommandText : "NULL", deleteCommand != null ? deleteCommand.CommandText : "NULL", repository.ActiveTransaction, updateBatchSize); return repository.Db.UpdateDataSet(dataSet, tableName, insertCommand, updateCommand, deleteCommand, repository.ActiveTransaction, updateBatchSize); } if(IsDebugEnabled) log.Debug("DataSet에 대해 배치작업을 실행합니다... " + "dataSet=[{0}], tableName=[{1}], insertCommand=[{2}], updateCommand=[{3}], deleteCommand=[{4}], ActiveTransaction=[{5}], updateBatchSize=[{6}]", dataSet.DataSetName, tableName, insertCommand != null ? insertCommand.CommandText : "NULL", updateCommand != null ? updateCommand.CommandText : "NULL", deleteCommand != null ? deleteCommand.CommandText : "NULL", repository.ActiveTransaction, updateBatchSize); return repository.Db.UpdateDataSet(dataSet, tableName, insertCommand, updateCommand, deleteCommand, updateBehavior, updateBatchSize); }
/// <summary> /// <paramref name="dataReader"/>를 읽어서, <see cref="DataTable"/>을 빌드하여 <paramref name="dataSet"/>에 추가합니다. /// </summary> public int Fill(DataSet dataSet, string tableName, IDataReader dataReader, int firstResult = 0, int maxResults = 0) { dataSet.ShouldNotBeNull("dataSet"); dataReader.ShouldNotBeNull("dataReader"); return _doFillDataSetCommand(dataSet, tableName ?? "Table" + dataSet.Tables.Count + 1, dataReader, firstResult, maxResults); }
/// <summary> /// 지정된 DataAdapter를 통해 얻은 정보를 DataSet으로 빌드한다. /// </summary> /// <param name="adapter">DataAdapter</param> /// <param name="tableName">Table name</param> /// <param name="targetDataSet">저장할 Dataset</param> /// <param name="firstResult">첫번째 레코드의 인덱스 (0부터 시작)</param> /// <param name="maxResults">최대 레코드 수 (0 이면 무시하고, 마지막 레코드까지 가져온다</param> public virtual void LoadDataSet(DbDataAdapter adapter, string tableName, DataSet targetDataSet, int firstResult = 0, int maxResults = 0) { adapter.ShouldNotBeNull("adapter"); targetDataSet.ShouldNotBeNull("targetDataSet"); Guard.Assert(adapter.SelectCommand != null, "adapter.SelectCommand is null."); if(IsDebugEnabled) log.Debug( "DataAdatpter를 이용하여 정보를 DataSet에 로드합니다... adapter.SelectCommand=[{0}], tableName=[{1}], firstResult=[{2}], maxResults=[{3}]", adapter.SelectCommand.CommandText, tableName, firstResult, maxResults); var resultCount = 0; var adoAdapter = new AdoDataAdapter(adapter); IDataReader reader = null; try { reader = ExecuteReaderInternal(adapter.SelectCommand); do { var name = tableName.IsWhiteSpace() ? AdoTool.DefaultTableName + ++resultCount : tableName; adoAdapter.Fill(targetDataSet, name, reader, firstResult, maxResults); } while(!reader.IsClosed && reader.NextResult()); } catch(Exception ex) { if(log.IsErrorEnabled) log.ErrorException("DataReader로부터 Data를 로드하는데 실패했습니다.", ex); } finally { if(reader != null) reader.Dispose(); //! 이거 하면 안된다!!! 호출한 놈이 해야한다. // adoAdapter.Dispose(); } }