从SQL服务器表的模式自动在C#中定义DataTable?

c# datatable sqlbulkcopy sql-server

我已经在SQL Server中有一些表,我正在编写一个C#程序来填充一些平面文件中的表。我计划使用SQLBulkCopy来加载表。

为SQLBulkCopy定义每个DataTable的所有列可能需要做很多工作。是否可以从现有SQL Server表的定义中轻松地在C#中生成这些DataTable?


我不能使用Bulk insertbcp因为平面文件有不同的奇怪布局,并且在插入之前必须由一些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 = ',')


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因