C# 关于sql server中大容量插入的咨询

C# 关于sql server中大容量插入的咨询,c#,sql-server,bulkinsert,C#,Sql Server,Bulkinsert,我有一个WinC窗体程序,需要插入sql server 该文件由文本选项卡分隔 有时它包含3列: BAR DES MAK 111 aaa 222 333 bbb 333 . . 有时它包含5列: BAR DES MAK PRI MLA 111 aaa 222 1.1 2.2 333 bbb 333 3.3 4.4 . . sql server表为: BAR nvarchar

我有一个WinC窗体程序,需要插入sql server

该文件由文本选项卡分隔

有时它包含3列:

BAR    DES     MAK
111    aaa     222
333    bbb     333
.
.
有时它包含5列:

BAR    DES     MAK    PRI    MLA
111    aaa     222    1.1    2.2
333    bbb     333    3.3    4.4
.
.
sql server表为:

BAR nvarchar(250)
DES nvarchar(250)
MAK nvarchar(250)
PRI nvarchar(250)
MLA nvarchar(250)
我尝试这样插入:

SQL = @"BULK INSERT CatTbl FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')";
Cmd = new SqlCommand(SQL, Conn);
Cmd.ExecuteNonQuery();
Cmd.Dispose();
如果有5列,它工作的很好,但如果有3列,它崩溃


我搜索了一下,没有找到解决办法。有人有主意吗?

批量插入不是很灵活。解决方案是将这些列加载到只有一个varchar列的表中,然后稍后进行拆分/解析

如果表与文件不匹配,请在表上创建一个与文件不匹配的视图,然后插入到视图中

-- Run this once in SSMS to create the view
CREATE VIEW MyView AS SELECT BAR,DES,MAK FROM CatTbl;

-- If your file has three columns, use this
BULK INSERT MyView FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')

-- If your file has five columns, use this
BULK INSERT CatTbl FROM 'd:\TEST\TEST.txt' WITH (CODEPAGE=1255,FIELDTERMINATOR = '\t')

msdn的副本。将同一个问题独立发布到多个论坛只会浪费精力和因果报应。一个可能无用的旁注:请记住,如果有任何问题需要取消检查,BulkInsert将强制您的外国密钥。