Я использую OLEDB для чтения файла excel в datatable. некоторые значения отсутствуют (Пусто). Почему OLEDB пропускает строковые значения? [Дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
6
задан Homam 29 August 2010 в 15:51
поделиться

3 ответа

Я нашел решение, добавив IMEX = 1 для строки подключения, но для него есть специальный формат, который описал в следующей ссылке .

IMEX Параметр предназначен для столбцов, в которых используются смешанные числовые и альфа-значения. Драйвер Excel обычно сканирует первые несколько строк, чтобы определить, какой тип данных использовать для каждого столбца. Если столбец определяется как числовой, основанный на проверке первых нескольких строк, тогда любые строки с альфа-символами в этом столбце будут возвращены как Null. Параметр IMEX (1 - режим ввода) заставляет тип данных столбца текст, чтобы правильно обрабатывать буквенно-цифровые значения.

С уважением

7
ответ дан Homam 25 August 2018 в 20:40
поделиться

Можете ли вы работать с конца excel? Этот пример, выполняемый в Excel, помещает смешанные данные в таблицу SQL Server:

Dim cn As New ADODB.Connection

scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& sFullName _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

cn.Open scn

s = "SELECT Col1, Col2, Col3 INTO [ODBC;Description=TEST;DRIVER=SQL Server;" _
& "SERVER=Some\Instance;Trusted_Connection=Yes;" _
& "DATABASE=test].TableZ  FROM [Sheet1$]"
cn.Execute s
1
ответ дан Fionnuala 25 August 2018 в 20:40
поделиться

Это не совсем правильно! По-видимому, Jet / ACE ALWAYS принимает строковый тип, если первые 8 строк пустые, независимо от IMEX = 1, и всегда использует числовой тип, если первые 8 строк являются числами (опять же, независимо от IMEX = 1). Даже когда я сделал строки, считанные 0 в реестре, у меня была такая же проблема. Это был единственный верный способ, чтобы заставить его работать:

[f1]

1
ответ дан jbrumbaugh 25 August 2018 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: