sqlbulkcopy с уведомлением и транзакциями - PullRequest
0 голосов
/ 16 марта 2012

У меня есть следующий код, который я пытаюсь использовать, чтобы проверить, можно ли иметь транзакции, и свойство 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;
                        }
                }

1 Ответ

0 голосов
/ 16 марта 2012

Я бы предположил, что из-за транзакции обработка происходит только после фиксации транзакции, поэтому вы не получите событие до тех пор, пока после этого.

...