批量插入问题

时间:2009-03-19 13:23:36

标签: c# ado.net bulkinsert

我在客户端有一个CSV文件,我想开发一个C#应用程序,将数据批量插入到数据库表中,以便最小化日志输出。如果我在客户端使用ADO.NET来调用数据库服务器中的存储过程,我感到很困惑。需要在客户端开发什么样的代码以及需要以存储过程的形式在服务器端实现哪种代码?

但我没有找到谷歌的任何样本。什么是准备使用的样品? : - )

编辑:更多信息:

我在客户端有很多数据,我想导入到数据库,但我不想要所有许多事务日志的开销。出于安全原因,我想在服务器端开发存储过程并从客户端(ADO.NET)调用。我想知道实现这样的目标。需要在服务器端的存储过程中开发什么样的T-SQL,以及如何在客户端有效地调用/填充数据?

如果仍然不清楚,请随时告诉我。

2 个答案:

答案 0 :(得分:8)

您可以将CsvReader挂钩到SqlBulkCopy,它可以很好地完成这项工作......类似于(未经测试):

using (CsvReader reader = new CsvReader(path))
using (SqlBulkCopy bcp = new SqlBulkCopy(CONNECTION_STRING))
{
    bcp.DestinationTableName = "SomeTable";
    bcp.WriteToServer(reader);
}

编辑您通常会批量插入暂存表,然后使用常规存储过程将数据移动到 real table。

答案 1 :(得分:1)

您使用的是SQL Server 2008吗?你能够执行动态SQL(不是我提倡它)吗?

如果是这样,您可以构造一个使用“Row contructors”的insert语句。基本上,insert语句现在将接受每行的参数数组,如下所示:

INSERT INTO TableA (Col1, Col2)
VALUES ('A', 'B'), ('C', 'D')

博客文章“SQL Server 2008 – Insert Multiple Records Using One Insert Statement – Use of Row Constructor”中有更多内容。

我希望这会有所帮助。