使用 SqlBulkCopy,如何将数据插入到非默认数据库架构中的表中?

Posted

技术标签:

【中文标题】使用 SqlBulkCopy,如何将数据插入到非默认数据库架构中的表中?【英文标题】:Using SqlBulkCopy, how do I insert data into a table in a non-default database schema? 【发布时间】:2011-05-19 06:10:08 【问题描述】:

我需要使用SqlBulkCopy 将数据插入到名为Staging 的架构中的表中。

API 似乎只允许您使用DestinationTableName 属性设置目标表名称。

我该如何做到这一点?有可能吗?

【问题讨论】:

【参考方案1】:

虽然 API 不提供设置目标架构的显式接口,但您实际上可以将 2 部分或 3 部分限定表名填充到 DestinationTableName 属性中,如下所示:

b.DestinationTableName = string.Format("[0].[1]", schemaName, tableName);

b.DestinationTableName =
    string.Format("[0].[1].[2]", databaseName, schemaName, tableName);

鉴于 BULK INSERT 一直支持完全限定的表名,这些单独的组件从未进入 API 似乎是一个很大的疏忽。

此外,由于DestinationTableName 似乎只是简单地输出到BULK INSERT 语句中,因此该属性可能容易受到SQL 注入的攻击。因此,如果您在某个时候从用户那里获取此信息,请确保在运行此操作之前清理输入。

【讨论】:

以上是关于使用 SqlBulkCopy,如何将数据插入到非默认数据库架构中的表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SqlBulkCopy 并通过 Glimpse 跟踪批量插入

使用 SqlBulkCopy 插入数据时出错

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

使用SqlBulkCopy 从sybase复制表到sqlserver中遇到重复的数据怎么办? 能不能设置什,跳过该次插入

C# 中的 SqlBulkCopy 类正在更改数值

使用SqlBulkCopy批量插入多条数据进入表中