bulkCopy.WriteToServer() 在没有数据被复制时不抛出异常
bulkCopy.WriteToServer() not throwing exception when no data is copied
我正在尝试将 DataTable
复制到 Sql 服务器上的目标 table。我使用以下代码。我知道 bulkCopy.WriteToServer()
是一个原子函数(全有或全无)。但是当什么都没有被复制时,我想知道!
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 是否完成了它的工作?
您可以在 x 行后指定 NotifyAfter property and then handle the SqlRowsCopied 事件。
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);
}
我正在尝试将 DataTable
复制到 Sql 服务器上的目标 table。我使用以下代码。我知道 bulkCopy.WriteToServer()
是一个原子函数(全有或全无)。但是当什么都没有被复制时,我想知道!
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 是否完成了它的工作?
您可以在 x 行后指定 NotifyAfter property and then handle the SqlRowsCopied 事件。
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);
}