2014-01-15 3 views
3

Я использую SqlBulkCopy класс для чтения первенствует в таблицеSqlBulkCopy читает только 255 символов

string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetFileName + ";Extended Properties=Excel 12.0;"; 
    //OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + targetFileName + @";Extended Properties=""Excel 8.0;IMEX=1;ImportMixedTypes=Text;HDR=YES;"""); 
    OleDbConnection con = new OleDbConnection(connStr); 
    OleDbCommand myCommand = new OleDbCommand("SELECT * FROM [Sheet1$]", con); 


    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(System.Configuration.ConfigurationManager.ConnectionStrings["CrossMediaConnectionString"].ToString())) 
     try 
     { 
      { 
       #region SqlBulkCopy 
       bulkCopy.DestinationTableName = "tbl_TempProductData"; 

       bulkCopy.ColumnMappings.Add("product_code", "ProductCode"); 
       bulkCopy.ColumnMappings.Add("product_name", "ProductName"); 
       bulkCopy.ColumnMappings.Add("category_relation_id", "RelatedCategoryId"); 
       bulkCopy.ColumnMappings.Add("short_description", "ProductDescription"); 



     con.Open(); 

       bulkCopy.WriteToServer(myCommand.ExecuteReader()); 

    } 
} 

но ProductDescription читает только 255 символов, даже для настольного tbl_TempProductData Я установил длину макс

+0

возможно дубликат [сотовых значений Excel укорочены по OLEDB-провайдеру] (http://stackoverflow.com/questions/898513/excel-cell-values -А-усеченное по-OLEDB-провайдер) –

ответ

0

Как rmoore сказал это answer,

Поставщик OLEDB для excel будет пытаться автоматически определять DataTypes на основе первых 8 строк данных, это может быть задано с помощью H DR = Да/Нет свойства в строке подключения. Кроме того, существует несколько типов, которые могут применяться к текстовым столбцам. Тип memo содержит более 255 символов, поэтому, если ни одна из первых 8 строк не имеет этого, он будет неправильно устанавливать тип данных.

Способ изменить это, изменив параметр реестра с именем TypeGuessRows, как описано здесь: Microsoft Support

Примечание: Допустимый диапазон значений для ключа TypeGuessRows составляет от 0 до 16. Однако, если значение равно 0, число отсканированных строк источника - 16384. Таким образом, если у вас есть очень большой файл, убедитесь, что самые большие строки являются первыми.

0

Вот моя строка подключения. Я думаю, удлиненное свойство может помочь вам ..

var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"", fileName); 
Смежные вопросы