我SqlBulkCopy在使用 SQL Server 身份验证时遇到命令问题。Windows 身份验证不会出现此问题。
SqlBulkCopy sbc = new SqlBulkCopy(sqConn.ConnectionString, SqlBulkCopyOptions.KeepIdentity);
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
用户 'xx' 登录失败
代码:
SqlBulkCopy sbc = new SqlBulkCopy(sqConn);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但不会保留标识列的原始值。
解决方案非常简单,但我仍然有兴趣知道为什么 SQL Server 身份验证应该与 Windows 身份验证不同。
using (SqlTransaction transaction =
sqConn.BeginTransaction())
{
SqlBulkCopy sbc = new SqlBulkCopy(sqConn,SqlBulkCopyOptions.KeepIdentity,transaction);
sbc.DestinationTableName = file;
sbc.BatchSize = 1000;
sbc.NotifyAfter = 1000;
sbc.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
sbc.WriteToServer(SourceTable);
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)