我正在尝试通过C#中的迁移进行批量插入,到目前为止看起来像这样
public override void Up()
{
Sql("BULK INSERT Test FROM 'C:\\test.csv'
WITH (
FORMATFILE = 'C:\\format.xml',
FIRSTROW = 2);"
);
}
test.csv
Id Name Birthday Status
1 John 23-11-1984 00:00 OK
2 Peter 17-05-1986 00:00 N/A
3 James 18-03-1987 00:00 OK
format.xml
<?xml version="1.0"?>
<BCPFORMAT
xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Id" xsi:type="SQLINT"/>
<COLUMN SOURCE="2" NAME="Name" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="3" NAME="Birthday" xsi:type="SQLDATETIM8"/>
<COLUMN SOURCE="4" NAME="Status" xsi:type="SQLBIT"/>
</ROW>
</BCPFORMAT>
测试表定义
Id (PK, not null)
Name (nvarchar(max), null)
Birthday (datetime, null)
Status (bit, null)
在updatig数据库之后我遇到了第一个错误(CSV中生日的日期格式是DD-MM-YYYY HH:MM):
批量加载数据转换错误(类型不匹配或无效字符 对于第3行,第3列(生日)的指定代码页。
但如果我在CSV文件中将日期格式更改为YYYY-MM-DD HH:SS,则可以正常工作。
第二个问题是对于字段&#39; Active&#39;在CSV中,我需要接受字符串&#34; OK&#34;或&#34; N / A&#34;并以某种方式转换它并将其作为位插入表中。
所以在这一点上,我的问题是: