Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将CSV加载到SQL Server时出错_C#_Sql Server_Tsql_Bulkinsert - Fatal编程技术网

C# 将CSV加载到SQL Server时出错

C# 将CSV加载到SQL Server时出错,c#,sql-server,tsql,bulkinsert,C#,Sql Server,Tsql,Bulkinsert,我有一个像这样的SQL Server表 CREATE TABLE [dbo].[Service] ( [SID] INT IDENTITY (1, 1) NOT NULL, [LID] INT NOT NULL, [RID] INT NOT NULL, PRIMARY KEY CLUSTERED ([SID] ASC), CONSTRAINT [FK_dbo.Service_dbo.Location_LID] FORE

我有一个像这样的SQL Server表

CREATE TABLE [dbo].[Service]
(
    [SID] INT IDENTITY (1, 1) NOT NULL,
    [LID]     INT NOT NULL,
    [RID]     INT NOT NULL,

    PRIMARY KEY CLUSTERED ([SID] ASC),

    CONSTRAINT [FK_dbo.Service_dbo.Location_LID] 
        FOREIGN KEY ([LID]) 
        REFERENCES [dbo].[Locations] ([LID]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.Service_dbo.Rates_RID] 
        FOREIGN KEY ([RID]) 
        REFERENCES [dbo].[Rates] ([RID]) ON DELETE CASCADE
)
我有一个
.csv
文件,它实际上是3列从1到100000递增的数字

例如:

1,1,1
2,2,2
3,3,3
它一直持续到10万行

我正试图通过Visual Studio通过T-SQL加载此
.csv
,并使用以下查询:

BULK INSERT service
FROM 'C:\service.csv'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
)
我发现以下错误,我不知道原因:

Msg 4864,第16级,状态1,第1行
第1行第3列(RID)的大容量加载数据转换错误(指定代码页的类型不匹配或无效字符)


诊断大容量插入问题的最简单方法是指定错误文件。错误文件将包含失败行的确切数据。根据MSDN,您还将获得一个控制文件,该文件将标识每个失败的行,并提供每个失败的详细信息

    BULK INSERT service
    FROM 'C:\service.csv'
    WITH
    (
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '\r\n',
        ERRORFILE = 'C:\ErrorFile.txt'
    );

打开包含故障数据的错误文件时,请使用显示空白和不可打印字符的文本编辑器,或者使用显示模式显示每个字符的字符代码。如果您有任何意外字符,它们将显示。

如果您使用Excel保存CSV文件,请确保已将其保存为“CSV(MS-DOS)”而不是“CSV(Macintosh)”。如果CSV文件是正确的CSV文件格式,则可以尝试使用格式文件进行批量加载。 CSV的格式文件应如下所示:

9.0
3
1   SQLINT  0   4   ","      1  SID ""
2   SQLINT  0   4   ","      2  LID ""
3   SQLINT  0   4   "\r\n"   3  RID ""
BULK INSERT [Service]
    FROM 'C:\import_dos.csv'
    WITH (FORMATFILE = 'C:\temp\services.FMT')
您可以按如下方式进行批量加载查询:

9.0
3
1   SQLINT  0   4   ","      1  SID ""
2   SQLINT  0   4   ","      2  LID ""
3   SQLINT  0   4   "\r\n"   3  RID ""
BULK INSERT [Service]
    FROM 'C:\import_dos.csv'
    WITH (FORMATFILE = 'C:\temp\services.FMT')

既然您在Windows上,行终止符不应该是
\r\n
?WIndows使用回车符和换行符(CRLF,或
\r\n
)作为行终止符*nix和OSX仅使用LF(
\n
)。我认为这也是问题所在,但我尝试了使用,但仍然出现相同的错误。我应该补充一点,我还尝试了“0x0a”。至少对于一个包含三行(
1…2…3
)的小示例,您的代码似乎工作正常。您是否尝试查看文件中失败的具体位置?请检查csv文件中的前导/尾随空格。根据csv格式,任何空格(即使在逗号之后)都是值的一部分,我没有检查行失败的地方。有没有简单的检查方法?我通过excel创建了一列并复制了两次,从而创建了csv文件。