2010-05-24 58 views
1

我使用的是SQL Server 2005中,VB.NET 2005年我希望能夠導入一個非常大的ex​​cel文件到名爲「XYZ」SqlBulkCopy的從CSV到SQL數據表

我做了一個SQL表通過執行以下操作:
1.將excel文件另存爲csv。(使用SaveAs XLCSV選項)
2.從CSV(使用ODBC連接和選擇*從'*')構建數據表「ABC」。csv命令)
3.複製數據表「ABC」到數據庫表「XYZ」(使用sqlBulkCopy.WriteToServer())

它工作正常,沒有任何錯誤,但是當我檢查編我的數據庫,我發現某些列的數據類型已經改變,因此它並沒有複製一些records.Any幫助將不勝感激

+0

你嘗試使用Excel ODBC驅動程序並直接從Excel中讀取?這應該避免任何列類型的問題。 CSV文件在默認情況下是無類型的,除非您有一個schema.ini伴隨它們。 – mdma 2010-05-24 18:43:20

回答

0

我想你會過得更好創建SQL Server中的目標表和使用T-SQL BULK INSERT來插入CSV。數據類型在您的表中是顯式的。使用中間數據庫存在推斷錯誤數據類型的風險,以及冗餘複製數據的風險。

+0

我不使用中間數據庫它只是數據集後者從使用ODBC dataadapter.My目標表中填寫的CSV僅在SQL Server中。 – Swapnil 2010-05-24 18:22:05

+0

對不起 - 我誤解「數據表」作爲「數據庫」。現在有道理!在你的SELECT * FROM ABC,儘量明確選擇列和使用(CAST AS型)顯式地命名所用的類型。 – mdma 2010-05-24 18:38:24

+0

請幫我寫這樣的sql語句,謝謝。 – Swapnil 2010-05-24 18:44:32

0

的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更多的信息和支持的數據類型,請訪問 http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx