【问题标题】:sqlbulkcopy with notifyafter and transactions带有 notifyafter 和事务的 sqlbulkcopy
【发布时间】:2012-03-15 23:03:05
【问题描述】:

我有以下代码,我试图用它来测试它是否可能有事务和一个 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;
                        }
                }

【问题讨论】:

    标签: c# sql c#-4.0 sqlbulkcopy


    【解决方案1】:

    我认为由于事务,处理仅在事务提交后发生,因此在此之后您不会引发事件。

    【讨论】:

    • 上面的代码确实引发了事件。如果我将批量大小设置为 10 并将 NotifyAfter 属性设置为 5,则引发事件。第一次 = 数据库中没有任何内容。第二 = 10 行,依此类推,直到添加所有行。所以我假设交易不起作用,但我不确定如何测试它。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 2011-08-20
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多