2017-12-08 6 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

問題はロールバックではありません。問題は、エラーmsgが示すとおりです:トランザクション内でDDL文を実行することはできません。私はそのDDLステートメントがどこから来るのか分かりませんが、メッセージはかなり明確です。 解決策の1つは、質問のデータベースに対して「ddl in tran」オプションを有効にすることです(sp_dboptionを使用)。

関連する問題