SqlBulkCopyOptions 枚举

定义

按位标志,指定要与 SqlBulkCopy 的实例一起使用的一个或多个选项。

此枚举支持其成员值的按位组合。

C#
[System.Flags]
public enum SqlBulkCopyOptions
继承
SqlBulkCopyOptions
属性

字段

名称 说明
AllowEncryptedValueModifications 64

指定时, AllowEncryptedValueModifications 支持在表或数据库之间批量复制加密数据,而无需解密数据。 通常,应用程序将从一个表中的加密列中选择数据并且无需密该数据(应用将连接到其列加密设置关键字设置为禁用的数据库),然后会使用此选项批量插入数据,这些数据仍然是加密的。 有关详细信息,请参阅 Always Encrypted

指定 AllowEncryptedValueModifications 时请谨慎,因为这可能会导致数据库损坏,因为如果数据确实已加密,或者如果使用与目标列相同的加密类型、算法和密钥正确加密,驱动程序不会检查。

CheckConstraints 2

在插入数据的同时检查约束。 默认情况下,不检查约束。

Default 0

使用所有选项的默认值。

FireTriggers 16

当指定后,导致服务器对于行插入数据库触发插入触发器。

KeepIdentity 1

保留源标识值。 未指定标识值时,该值由目标指派。

KeepNulls 8

无论默认值的设置为何,在目标表中都将保留 null 值。 如果未指定,由默认值替换 null 值(适用时)。

TableLock 4

获取大容量复制操作期间的大容量更新锁定。 如果未指定,则使用行锁定。

UseInternalTransaction 32

当指定后,每批大容量复制操作将在事务中进行。 如果指示该选项,并且还向构造函数提供 SqlTransaction 对象,则发生 ArgumentException

示例

以下控制台应用程序演示如何执行大容量加载,将源表的标识列中的值复制到目标表中的相应列,而不是为每行的标识列生成新值。

若要查看 选项如何更改大容量加载的工作方式,请使用 dbo 运行示例。BulkCopyDemoMatchingColumns 表为空。 从源加载所有行。 接下来,在不清空表的情况下再次运行示例。 引发异常,代码会向控制台窗口写入一条消息,通知你由于主键冲突而未添加行。

重要

除非已按批量复制示例设置中所述创建了工作表,否则此示例不会运行。 提供此代码是为了演示仅使用 SqlBulkCopy 时的语法。 如果源表和目标表位于同一SQL Server实例中,则使用 Transact-SQL INSERT … SELECT 语句复制数据会更轻松、更快。

C#
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        // Open a sourceConnection to the AdventureWorks database.
        using (SqlConnection sourceConnection =
                   new SqlConnection(connectionString))
        {
            sourceConnection.Open();

            // Perform an initial count on the destination table.
            SqlCommand commandRowCount = new SqlCommand(
                "SELECT COUNT(*) FROM " +
                "dbo.BulkCopyDemoMatchingColumns;",
                sourceConnection);
            long countStart = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Starting row count = {0}", countStart);

            // Get data from the source table as a SqlDataReader.
            SqlCommand commandSourceData = new SqlCommand(
                "SELECT ProductID, Name, " +
                "ProductNumber " +
                "FROM Production.Product;", sourceConnection);
            SqlDataReader reader =
                commandSourceData.ExecuteReader();

            // Create the SqlBulkCopy object using a connection string
            // and the KeepIdentity option.
            // In the real world you would not use SqlBulkCopy to move
            // data from one table to the other in the same database.
            using (SqlBulkCopy bulkCopy =
                new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity))
            {
                bulkCopy.DestinationTableName =
                    "dbo.BulkCopyDemoMatchingColumns";

                try
                {
                    // Write from the source to the destination.
                    bulkCopy.WriteToServer(reader);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // Close the SqlDataReader. The SqlBulkCopy
                    // object is automatically closed at the end
                    // of the using block.
                    reader.Close();
                }
            }

            // Perform a final count on the destination
            // table to see how many rows were added.
            long countEnd = System.Convert.ToInt32(
                commandRowCount.ExecuteScalar());
            Console.WriteLine("Ending row count = {0}", countEnd);
            Console.WriteLine("{0} rows were added.", countEnd - countStart);
            Console.WriteLine("Press Enter to finish.");
            Console.ReadLine();
        }
    }

    private static string GetConnectionString()
        // To avoid storing the sourceConnection string in your code,
        // you can retrieve it from a configuration file.
    {
        return "Data Source=(local); " +
            " Integrated Security=true;" +
            "Initial Catalog=AdventureWorks;";
    }
}

注解

构造实例时SqlBulkCopySqlBulkCopyOptions可以使用 枚举来更改该实例的方法的行为方式WriteToServer

适用于

产品 版本
.NET Core 1.0, Core 1.1
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0

另请参阅