无法从其他类的方法获取更新值

时间:2016-12-21 10:20:16

标签: c# .net ado.net sqlbulkcopy

以下是我的课程:

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函数,我希望在受影响的记录变量中获取当前处理过的记录。

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

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方法来执行批量复制,但对于每个批量复制,我想获得批量复制处理的记录数,但问题是我得到了在affectedRecords变量中为0。

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

1 个答案:

答案 0 :(得分:2)

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

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

在OnSqlRowsCopied事件处理程序中,如果是Console应用程序,您将获得持续进展。 但在您的情况下,您只需从源表中选择count(*)即可显示计数。

- Source