从 SQL Server 表的架构中自动定义 C# 中的 DataTable?

问题描述 投票:0回答:3

我已经在 SQL Server 中有一些表,并且正在编写一个 C# 程序来从一些平面文件填充这些表。我打算使用

SQLBulkCopy
来加载表格。

为 SQLBulkCopy 定义每个 DataTable 的所有列可能需要大量工作。从现有 SQL Server 表的定义中用 C# 生成这些 DataTables 是一种简单的方法吗?


我无法使用

Bulk insert
bcp
,因为平面文件具有不同的奇怪布局,并且在插入之前必须通过一些 C# 代码对其进行解析。

c# sql-server datatable sqlbulkcopy
3个回答
17
投票

如果您想要强力方法,您可以对每个表使用以下内容:

    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
将仅返回没有记录的表结构。


1
投票

如果您正在寻找一种将平面文件加载到 SQL 中的快速方法,您可以使用 BULK INSERT。 只需指定一个分隔符,只要文件中的列按照与数据库表相同的顺序排列,所有内容都会自动映射出来。 您确实需要一些额外的权限来执行批量插入,但根据我的经验,这是处理该过程的最快、最有效的方法。

BULK INSERT Database.dbo.Table
FROM 'C:\inetpub\website\file.csv'
WITH (FIELDTERMINATOR = ',')

0
投票
public DataTable execGettable(string sql)
{
   DataTable dt = new DataTable();
   if (conn.State == ConnectionState.Open)
   {
      conn.Close();
   }
   ConnectionString = sqlconnection.ConnectionString;
   conn.ConnectionString = ConnectionString;
   conn.Open();
   cmd = new SqlCommand(sql, conn);
   try
   {
     dt.Load(cmd.ExecuteReader());
   }
   catch (Exception ae)
   {
     errormessage = ae.Message.ToString();
   }
   conn.Close();
   return dt;
}
© www.soinside.com 2019 - 2024. All rights reserved.