2017-12-08 17 views
0

Ich habe ein Programm, das eine Massenkopie in einige Sybase-DB-Tabellen ausführt. Die Rollback-Transaktion funktioniert jedoch nicht. Beim Durchlaufen der Logik scheint das Problem beim Transaktionsobjekt zu liegen. Ich bin gerade ratlos. Jeder Rat wäre großartig.C# -Transaktionsfehler in AseBulkCopy

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; 
     } 
    } 

Dies ist der Fehler, den ich habe:

Sybase.Data.AseClient.AseException: Der Befehl 'CREATE TABLE' nicht innerhalb einer Multi-statement Transaktion erlaubt in die 'Tempdb'-Datenbank.

Antwort

0

Ihr Problem ist nicht mit dem Rollback. Das Problem ist, wie der Fehler msg sagt: Sie können eine DDL-Anweisung innerhalb einer Transaktion nicht tun. Ich weiß nicht, wo diese DDL-Anweisung herkommt, aber die Nachricht ist ziemlich klar. Eine mögliche Lösung ist, die Option 'ddl in tran' für die Datenbank in Fragen zu aktivieren (mit sp_dboption).

Verwandte Themen