我已经在 SQL Server 中有一些表,我正在编写一个 C# 程序来从一些平面文件中填充这些表。我打算用来SQLBulkCopy
加载表格。
为 SQLBulkCopy 的每个 DataTable 定义所有列可能需要做很多工作。从现有 SQL Server 表的定义中用 C# 生成这些 DataTables 是否是一种简单的方法?
我不能使用Bulk insert
或bcp
因为平面文件处于不同的奇怪布局中,并且在插入之前必须由一些 C# 代码解析它们。
我已经在 SQL Server 中有一些表,我正在编写一个 C# 程序来从一些平面文件中填充这些表。我打算用来SQLBulkCopy
加载表格。
为 SQLBulkCopy 的每个 DataTable 定义所有列可能需要做很多工作。从现有 SQL Server 表的定义中用 C# 生成这些 DataTables 是否是一种简单的方法?
我不能使用Bulk insert
或bcp
因为平面文件处于不同的奇怪布局中,并且在插入之前必须由一些 C# 代码解析它们。
如果您想要蛮力方法,您可以对每个表使用以下内容:
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection("Some SQLConnectionString")) {
conn.Open();
using (SqlDataAdapter adapter = new SqlDataAdapter("SELECT TOP 0 * FROM SomeTable", conn))
{
adapter.Fill(dt);
};
};
将SELECT TOP 0
只返回没有记录的表结构。
如果您正在寻找一种将平面文件加载到 SQL 中的快速方法,您可以使用 BULK INSERT。只需指定一个分隔符,只要文件中的列按照与数据库表相同的顺序排列,所有内容都会自动映射。您确实需要一些额外的权限才能执行批量插入,但根据我的经验,这是处理该过程的最快、最有效的方法。
BULK INSERT Database.dbo.Table
FROM 'C:\inetpub\website\file.csv'
WITH (FIELDTERMINATOR = ',')