2012-02-14 63 views
11

這是我的代碼,包含以下列和DB中的那些列是nvarchars無法使用sqlbulkcopy插入數據表

SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, 
System.Data.SqlClient.SqlBulkCopyOptions.Default, transaction); 

bulkCopy.DestinationTableName = "Test"; 
bulkCopy.ColumnMappings.Add("Number", "Code"); 
bulkCopy.ColumnMappings.Add("Type", "Type"); 
bulkCopy.ColumnMappings.Add("Group", "Group"); 
bulkCopy.ColumnMappings.Add("Short Text", "ShortText"); 
bulkCopy.ColumnMappings.Add("Text", "Description"); 
bulkCopy.WriteToServer(dataTable); 

我試圖插入一個DB整體數據表,使用批量複製,但我收到此錯誤:

The given value of type String from the data source cannot be converted to type nvarchar of the specified target column.

+0

您需要向我們展示一些表格結構,代碼等 - 只是出現這種錯誤,我們無法幫助您...... - 請參閱http://tinyurl.com/so-hints – 2012-02-14 07:35:11

+0

請檢查你來源數據。源中可能有無效數據。 – 2012-02-14 07:43:03

回答

18

可以由太短柱造成的。如果您的ShortText列被定義爲NVARCHAR(30)並且您有40個字符的字符串,則可能會出現該錯誤。看到這裏例如:http://forums.asp.net/p/1228890/2212376.aspx

+0

賓果!這是我的問題所在。好的提示,以及錯誤信息不會告訴你'整個故事'的例子。 – NateJ 2013-12-06 23:59:46

+0

太棒了!保存了我的生活;) – Icarus 2015-09-04 21:03:19

4

我有這個問題的另一個答案,也許它可以派上用場。如果您有一個包含"(引號)的字符串,您也會收到此錯誤消息。至少我剛收到這條錯誤消息,並且我搜索了錯誤的行,並且發現了這一點。當我刪除引號時,錯誤消失。

+0

我花了幾個小時試圖解決這個錯誤,這原來也是我的罪魁禍首。我只是將源數據庫中的所有數據複製到Excel電子表格中,在表單中搜索錯誤的字符並找到一個實例。 – Krondorian 2015-01-06 21:55:42

+0

有沒有辦法讓它使用引號,或者以某種方式導入後再插入它們? – 2016-11-04 14:12:15