以下是我的课程:
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批量复制处理的当前行。
答案 0 :(得分:2)
RowsCopied属性仅在复制100条记录后更新(使用NotifyAfter设置)。如果你放置
Console.WriteLine("Copied {0} so far...", e.RowsCopied);
在OnSqlRowsCopied事件处理程序中,如果是Console应用程序,您将获得持续进展。 但在您的情况下,您只需从源表中选择count(*)即可显示计数。
- Source