2017-12-08 1 views
0

일부 Sybase DB 테이블로 대량 복사를 수행하는 프로그램이 있습니다. 그러나 롤백 트랜잭션이 작동하지 않습니다. 로직을 단계별로 실행할 때 문제는 트랜잭션 객체와 관련이있는 것처럼 보입니다. 나는 지금 패배하고있다. 어떤 충고라도 잘 될 것입니다.AseBulkCopy에서 C# 트랜잭션 오류가 발생했습니다.

Sybase.Data.AseClient.AseException :

public static void SqlBulkCopy() 
    { 
     try 
     { 
      conn.Open(); 
      using (transaction = conn.BeginTransaction()) 
      { 
       using (bulkCopy = new AseBulkCopy(conn, AseBulkCopyOptions.Default, transaction)) 
       { 
        BulkCopying("DB_TABLE_1", dataTable1); 
        BulkCopying("DB_TABLE_2", dataTable2); 
        BulkCopying("DB_TABLE_3", dataTable3); 
        transaction.Commit(); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 

    private static void BulkCopying(string dbTableName, DataTable dtSourceName) 
    { 
     try 
     { 
      bulkCopy.BatchSize = 1000; 
      bulkCopy.BulkCopyTimeout = 720; 
      bulkCopy.NotifyAfter = 1000; 
      bulkCopy.DestinationTableName = dbTableName; 
      bulkCopy.WriteToServer(dtSourceName); 
     } 
     catch (Exception ex) 
     { 
      transaction.Rollback(); 
      throw ex; 
     } 
    } 
은 내가 가진 오류 인 'CREATE TABLE'명령은 다중 문 트랜잭션 내에서 허용되지 않습니다 'tempdb'데이터베이스.

답변

0

문제점이 롤백과 관련이 없습니다. 문제는 오류 메시지가 말하는대로입니다 : 트랜잭션 내에서 DDL 문을 수행 할 수 없습니다. DDL 성명서의 출처를 모르지만 메시지는 분명합니다. 가능한 한 가지 해결책은 질문에서 데이터베이스에 대해 'ddl in tran'옵션을 활성화하는 것입니다 (sp_dboption 사용).

관련 문제