【发布时间】:2014-01-06 14:08:50
【问题描述】:
我有一个 CSV 文件,其中包含大约 400 万行干净数据,我需要将其导入 SQL Server 2008 R2 数据库。
我尝试仅通过 TSQL、SSIS 和其他一些方法来执行此操作,但最后我总是遇到同样的问题,每行有 2,000 多列。 SQL Server 在读取 CSV 文件中的那么多列时遇到问题。
因此,我最终编写了一个小 C# 控制台程序来解析 csv 文件,并完成所有工作以将 2,000 多列分解到我数据库中的关系表中。一切都运行良好,但 CSV 文件有 400 万行,效率是关键。
说了这么多,这就是我遇到的问题,而且我一生都无法弄清楚。我正在使用旧的 SqlCommand 类进行批量插入。我不知道如何将空值输入数据库。例如,采取这一行
var PreparedCommand = "insert into person_modeling_info (person_id, modeling_info, response) values ";
PreparedCommand += "( " + info[0] + ",'" + info[1] + "'," + (item2.Value == "" ? "'NULL'" : "'"+item2.Value+"'") + "),";
我不担心 SQL 注入,因为我 100% 确定数据是干净的。我知道我可以使用参数插入 null,但参数较慢,因为我必须一次插入一条记录,而不是像进行批量插入一样
insert into table (values), (values), (values)
当我使用连接执行插入时,它会作为空字符串插入到数据库中。
如果有人有想法,任何帮助将不胜感激。
【问题讨论】:
-
我不担心 SQL 注入你应该我的朋友,你应该..
-
为什么,它将数据从内部的一个系统移动到内部的另一个系统。
-
NULL不带引号应该可以。当然,注入问题仍然存在。 -
"'NULL'"产生字符串 NULL,删除单引号作为其 DB 关键字
标签: c# sql sql-server