【发布时间】:2014-10-09 13:31:22
【问题描述】:
我需要从csv 文件将数据批量插入SQL。在 SQL 中,我使用以下命令:
bulk insert InputTestData
from 'D:\Project\UnitTestProjct\RGTestingToolTestProject\NUnitTestProject\RGTestToolDB\InputTestData.csv'
with
( CODEPAGE ='RAW',
rowterminator='\n',
fieldterminator = '\t'
)
上述命令在使用 SQL 查询分析器时有效并插入数据,但在使用下面给出的代码从C# 执行时抛出错误:
StringBuilder builder = new StringBuilder();
builder.Append("bulk insert " + objectName + " from ");
builder.Append("'" + ResourceFilePath + Path.DirectorySeparatorChar + objectPath + "'");
builder.Append(" with");
builder.Append(" (");
builder.Append(" rowterminator='\n',");
builder.Append(" fieldterminator = '\t'");
builder.Append(" )");
SqlHelper.ExecuteNonQuery(transaction, CommandType.Text, builder.ToString());
它抛出错误:
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 8 (IsBaselineTest).
C# 代码生成的查询在 SQL 查询分析器中也可以正常工作:
bulk insert InputTestData from 'D:\Project\UnitTestProjct\RGTestingToolTestProject\NUnitTestProject\\RGTestToolDB\InputTestData.csv' with ( rowterminator='
', fieldterminator = ' ',CODEPAGE ='RAW' )
如果您需要CSV 和SQL 表结构,请告诉我
请在上面提供帮助。
提前致谢
【问题讨论】:
-
您是否在查询分析器中测试了您的
StringBuilder生成的查询? -
是的,它的工作,我已经更新了该查询也有问题的块
-
您在 c# 中构建的字符串缺少参数
CODEPAGE。如果你把它加回去有什么变化吗? -
我无法直接回答您,但您可以尝试使用专为此场景设计的 System.Data.SqlClient.SqlBulkCopy 类。
-
我很确定您必须为行和字段终止符转义反斜杠,因为看起来字符串已经将它们转换为实际字符 0x10 和 0x09。我认为它必须是 builder.Append(" rowterminator='\\n',"); builder.Append("fieldterminator = '\\t'");
标签: c# sql sql-server bulkinsert sqlbulkcopy