我已经在 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 = ',')
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;
}