A NullReferenceException
бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.
Например:
string str = string.Empty;
str.ToLower(); // throw null reference exception
Public Class Person {
public string Name { get; set; }
}
Person objPerson;
objPerson.Name /// throw Null refernce Exception
Я нашел решение, добавив IMEX = 1 для строки подключения, но для него есть специальный формат, который описал в следующей ссылке .
IMEX Параметр предназначен для столбцов, в которых используются смешанные числовые и альфа-значения. Драйвер Excel обычно сканирует первые несколько строк, чтобы определить, какой тип данных использовать для каждого столбца. Если столбец определяется как числовой, основанный на проверке первых нескольких строк, тогда любые строки с альфа-символами в этом столбце будут возвращены как Null. Параметр IMEX (1 - режим ввода) заставляет тип данных столбца текст, чтобы правильно обрабатывать буквенно-цифровые значения.
blockquote>С уважением
Можете ли вы работать с конца 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
Это не совсем правильно! По-видимому, Jet / ACE ALWAYS принимает строковый тип, если первые 8 строк пустые, независимо от IMEX = 1, и всегда использует числовой тип, если первые 8 строк являются числами (опять же, независимо от IMEX = 1). Даже когда я сделал строки, считанные 0 в реестре, у меня была такая же проблема. Это был единственный верный способ, чтобы заставить его работать:
[f1]