【问题标题】:How to use BulkCopy without Defining the Destination Table如何在不定义目标表的情况下使用 BulkCopy
【发布时间】:2012-02-13 08:53:37
【问题描述】:

全部,

我有以下BulkCopy操作:

// Convert the FlexGrid to a DataTable.
DataTable currData = (DataTable)c1ErrFlexGrid.DataSource;

// Insert the data into the database.
SqlBulkCopy SqlBulkIns = new SqlBulkCopy(strConnString, SqlBulkCopyOptions.Default);
SqlBulkIns.BatchSize = 5000;
SqlBulkIns.DestinationTableName = String.Format("dbo.{0}", strTableName);
SqlBulkIns.WriteToServer(currData);

其中strConnectionString 是已定义且有效的连接字符串。过去,当表 strTableName 存在并且定义了字段时,这工作得很好。我现在希望在运行时定义的DataTable 上执行这个BulkCopy 操作;即,无需在 SQL 中预定义表结构。这可能吗?如果有,怎么做?

感谢您的宝贵时间。

【问题讨论】:

  • 您的意思是要创建一个表并将数据从数据表中批量加载到其中吗? (即sql server中不存在该表)?
  • 你的意思是,你想问用户一个表名,你的程序实际上会创建一个与c1ErrFlexGrid.DataSource 相同模式的表,然后填充它?
  • 是的,你都对......如果表存在于 SQL Server 中,则上述代码有效。我想知道当表当前不存在时如何将DataTable 批量加载到 SQL Server 中,而不预先定义它。
  • 除了提前手动创建表(基于您的数据表模式)之外,没有简单的方法可以做到这一点。您需要一些代码来检查表是否存在,如果不存在则创建它。
  • 我担心有人会这么说!谢谢你的时间。如果您将此作为答案,我将很乐意接受...

标签: c# sql datatable sqlbulkcopy


【解决方案1】:

您可以使用此SqlTableCreator 对象从您的数据表创建一个 SQL 表,然后运行批量插入。

【讨论】:

  • 不错的图书馆!打算(基本上)建议编码。 +1 懒惰。
  • +1 这实际上是我最终做的。 5 天太晚了,但一个伟大的发现!感谢您的帮助!
  • 如果DBF文件不断变化怎么办?我想在写入之前动态创建表。
  • 链接失效了。有镜子吗?
  • 也许这个链接可以作为一个新的类;我之前没有机会看到上述课程,所以我只是发布我认为有用的内容:code.google.com/p/besasm-legacy/source/browse/DotNet/SQLUtils/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2021-11-21
  • 2010-10-11
  • 1970-01-01
  • 2020-11-20
  • 2014-09-24
  • 1970-01-01
相关资源
最近更新 更多