.net SqlBulkCopy从CSV复制到SQL数据表

.net SqlBulkCopy从CSV复制到SQL数据表,.net,vb.net,sql-server-2005,.net,Vb.net,Sql Server 2005,我使用的是SQLServer2005,VB.NET2005。我希望能够将一个非常大的excel文件导入到一个名为XYZ的SQL表中 我通过以下方式做到了这一点: 1.将excel文件另存为csv。使用另存为XLCSV选项 2.使用ODBC连接从CSV.ABC构建数据表,并从“*”选择*CSV命令 3.使用sqlBulkCopy.WriteToServer将datatableABC复制到数据库表xyz中 它工作正常,没有任何错误,但当我检查数据库时,我发现某些列的数据类型已更改,因此它没有复制某些

我使用的是SQLServer2005,VB.NET2005。我希望能够将一个非常大的excel文件导入到一个名为XYZ的SQL表中

我通过以下方式做到了这一点: 1.将excel文件另存为csv。使用另存为XLCSV选项 2.使用ODBC连接从CSV.ABC构建数据表,并从“*”选择*CSV命令 3.使用sqlBulkCopy.WriteToServer将datatableABC复制到数据库表xyz中


它工作正常,没有任何错误,但当我检查数据库时,我发现某些列的数据类型已更改,因此它没有复制某些记录。如有任何帮助,将不胜感激。

我认为您最好在SQL server中创建目标表,并使用t-SQL插入CSV。数据类型在表中是显式的。使用中间数据库可能会推断出错误的数据类型,并会冗余复制数据。

schema.ini可以定义多个csv文件,如下所示:

[customer.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=True
Col1=customerID Long
Col2=customerName Text Width 128
Col3=comments Memo

[order.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=True
Col1=orderID Long
Col2=customerID Long
Col3=orderDate DateTime

[orderDetail.csv]
Format=CSVDelimited
CharacterSet=ANSI
ColNameHeader=True
Col1=orderID Long
Col2=itemID Long
Col3=Quantity Short
有关schema.ini和支持的数据类型的更多信息,请访问

我没有使用中间数据库,它只是使用odbc dataadapter从csv获取填充的数据集。我的目标表仅在Sql Server中。对不起,我将datatable误读为数据库。现在说得通了!在您的SELECT*FROM ABC中,尝试显式选择列,并使用强制转换类型显式命名要使用的类型。请您帮助我编写此类sql语句,谢谢。最简单的方法可能是创建一个schema.ini文件,并将其与CSV放在同一文件夹中。请看,非常感谢,这很有帮助。尽管我还有一个问题,我如何为同一目录中的多个csv文件使用模式文件。是否可以在同一架构文件中写入多个csv文件的列名和格式??是否尝试使用Excel ODBC驱动程序并直接从Excel读取?这样可以避免列类型出现任何问题。CSV文件在默认情况下是非类型化的,除非有schema.ini伴随它们。