首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当没有复制数据时,bulkCopy.WriteToServer()不会抛出异常

当没有复制数据时,bulkCopy.WriteToServer()不会抛出异常
EN

Stack Overflow用户
提问于 2015-01-21 14:00:42
回答 1查看 2.2K关注 0票数 0

我正在尝试将DataTable复制到Server上的目标表中。我使用以下代码。我知道bulkCopy.WriteToServer()是一个原子(全部或不存在)函数。但是,当什么都没有被复制,我想知道!

代码语言:javascript
复制
try
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn.ConnectionString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction))
    {
        bulkCopy.DestinationTableName = "MyDestinationTable";
        bulkCopy.WriteToServer(dt);
        convertSuccess = true;
    }
}
catch
{
    convertSuccess = false;
}

我已经看到没有任何东西被复制到"MyDestinationTable“中,但是我没有意识到,因为我的convertSuccess标志返回了true。有没有办法知道bulkCopy是否已经完成了它的工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 14:27:22

可以指定https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.notifyafter(v=vs.110).aspx属性,然后在x行数之后处理https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.sqlrowscopied(v=vs.110).aspx事件。

代码语言:javascript
复制
static void Main() {
    try {
        using(SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn.ConnectionString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.UseInternalTransaction)) {
            //Event handling
            bulkCopy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
            bulkCopy.NotifyAfter = 50; //Put your rowcount here

            bulkCopy.DestinationTableName = "MyDestinationTable";
            bulkCopy.WriteToServer(dt);
            convertSuccess = true;
        }
    } catch {
        convertSuccess = false;
    }
}


private static void OnSqlRowsCopied(object sender, SqlRowsCopiedEventArgs e) {
    Console.WriteLine("Copied {0} so far...", e.RowsCopied);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28069060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档