/// <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);
        }
Beispiel #2
0
        /// <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();
            }
        }