【问题标题】:Unable to get updated value from method of other class无法从其他类的方法中获取更新值
【发布时间】:2016-12-21 10:20:15
【问题描述】:

下面是我的课:

MsSql.cs:

public class MSSqlBLL
{
    public static long RowsCopied { get; set; }

    public long BulkCopy()
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn))
        {
            bulkCopy.DestinationTableName = "dbo.Table1";
            bulkCopy.BatchSize = 100;
            bulkCopy.SqlRowsCopied +=
                new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
            bulkCopy.NotifyAfter = 100;
            try
            {
                bulkCopy.WriteToServer(reader);

            }
            return RowsCopied;
        }
    }

    private static void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
    {
        RowsCopied = RowsCopied + e.RowsCopied;
    }
}

我正在从这个类调用 BulkCopy 函数,我想在受影响的记录变量中获取当前处理的记录。

例如:对于循环的每次迭代,我都希望在我的 affectedRows 变量中获取受影响的记录。

public class MySqlBLL
{
    public void GetTotalRows()
        {
            int  totalRecords = 500;
            var table = "Table1";
            for (int i = 0; i < totalRecords / 100; i++) //
             {
                     query = "SELECT * FROM " + table + " LIMIT " + 0 + "," + 100;
                     var reader = Execute(conn, query);
                     long affectedRecords = msSql.BulkCopy();
                     reader.Close();
             }
        }
}

在上述方法中,我将逐块数据发送到 BulkCopy 方法以执行大容量复制,但是对于每个大容量复制,我想获取由大容量复制处理的记录数但问题是我得到在受影响的记录变量中为 0。

我想访问由 sql 批量复制处理的当前行。

【问题讨论】:

    标签: c# .net ado.net sqlbulkcopy


    【解决方案1】:

    RowsCopied 属性仅在复制 100 条记录后更新(使用 NotifyAfter 设置)。如果你放置

    Console.WriteLine("Copied {0} so far...", e.RowsCopied);
    

    在 OnSqlRowsCopied 事件处理程序中,您将在控制台应用程序的情况下获得持续进展。 但在您的情况下,您可以简单地从源表中选择 count(*) 来显示计数。

    -Source

    【讨论】:

    • 抱歉,我不想触发额外的查询来获取计数,因为在这种情况下,我将不得不在每次迭代时触发查询
    • 简单来说,您希望受影响的记录仅在操作完成后才可用,因此您需要等待。 msSql.BulkCopy() int tries=5; While(MSSqlBLL.RowsCopied=100 &amp;&amp; tries&lt;5) { tries++; Thread.Sleep(1000); } long affectedRecords =MSSqlBLL.RowsCopied;
    • 关于同一question的参考
    猜你喜欢
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多