2013-10-30 50 views
1

我想用C#做批量插入。當源csv中的列數與目標表相同時,我看到了一些簡單的代碼。我有一個csv文件,我想要插入到目標表的特定列中。就我而言,目標中的列數大於csv文件中的列數。我希望能夠將csv列映射到目標列。這可能與SqlBulkCopy?如果沒有,還有其他選擇嗎?用C#做一個批量插入?

我使用.NET 3.5和Visual Studio 2008

來源 http://www.codeproject.com/Articles/439843/Handling-BULK-Data-insert-from-CSV-to-SQL-Server

StreamReader file = new StreamReader(bulk_data_filename); 
CsvReader csv = new CsvReader(file, true,','); 
SqlBulkCopy copy = new SqlBulkCopy(conn); 
copy.DestinationTableName = tablename; 
copy.WriteToServer(csv); 
+0

檢查這個答案http://stackoverflow.com/a/2978440/1036187 – rivarolle

+0

我爲什麼要做這個 - 很長的故事。它實際上是SSIS。 SQL服務器和SSIS無法解析和執行大型.SQL文件。所以,這是我的下一個選擇。 – Steam

+1

可能重複[如何使用SqlBulkCopyColumnMappingCollection?](http://stackoverflow.com/questions/2978275/how-to-use-sqlbulkcopycolumnmappingcollection) – NotMe

回答

1

這就是你想要的? SqlBulkCopyColumnMapping MSDN Reference

// Set up the column mappings by name. 
SqlBulkCopyColumnMapping mapID = new SqlBulkCopyColumnMapping("ProductID", "ProdID"); 
bulkCopy.ColumnMappings.Add(mapID); 
+0

將數據從csv文件移動到表的工作是否可行?現在,我的csv文件沒有列名。但可以輕鬆添加。 – Steam

+1

這個類也可以映射到列索引(而不是名稱)。也許值得嘗試一下。 – Knickedi

+0

如果您只想將1列csv加載到2列表中,您能告訴我代碼會是什麼樣子嗎?謝謝。我希望SqlBulkCopy和設置csv源一樣簡單,定義映射到某個地方,讓SqlBulkBulkCopy爲你完成剩下的工作。這是真的嗎? – Steam