2012-03-15 216 views
0

我有下面的代码,即时尝试用来测试,如果它可能有事务和notifyAfter属性用于引发一个事件(我已经尝试用一个代替事件我创建/提高自己,但只有在所有行被复制后才会提升)。下面的链接显示,其不可能sqlbulkcopy与notifyafter和交易

MSDN

有没有人有这样的经验吗?由于

  using (SqlConnection connection = new SqlConnection(connectionString)) 
      { 
       connection.Open(); 
       { 
         try 
         { 
          using (SqlBulkCopy copy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity |SqlBulkCopyOptions.UseInternalTransaction)) 

          { 
           //Column mapping for the required columns. 
           for (int count = 0; count < numberOfColumns; count++) 
           { 
            copy.ColumnMappings.Add(count, count); 
           } 

           //SQLBulkCopy parameters. 
           copy.DestinationTableName = dataTableName; 
           copy.BatchSize = batchSize; 

           copy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied); 
           copy.NotifyAfter = 5; 

           copy.WriteToServer(fullDataTable); 
          } 
         } 
         //Error(s) occured while trying to commit the transaction. 
         catch (InvalidOperationException transactionEx) 
         { 
          //uploadTransaction.Rollback(); 
          status = "The current transaction has been rolled back due to an error. \n\r" + transactionEx.Message; 
          MessageBox.Show(status, "Error Message:"); 
          alreadyCaught = true; 
          throw; 
         } 
       } 

回答

0

我会假设,因为交易的,只有事务被提交,因此你不会得到上升,直到后,该事件发生后的处理。

+0

上面的代码确实会引发事件。如果我将批处理大小设置为10并将NotifyAfter属性设置为5,则会引发事件。第一次= DB中什么都没有。 2nd = 10行等等,直到所有行都被添加。所以即时通讯假设交易不起作用,但我不知道如何测试。谢谢你的帮助。 – 2012-03-16 07:54:17