условие запроса oledb со столбцом по номеру - PullRequest
0 голосов
/ 14 января 2019

Я читаю Excel-документ через oledb. Когда нет заголовка, как использовать столбцы в моем запросе для настройки условий?

Я хочу сделать что-то вроде этого:

SELECT * FROM [MY_SHEET$A3:M] WHERE [1] IS NOT NULL;

Когда я пытаюсь это сделать, я получаю следующую ошибку:

Не указано значение хотя бы для одного обязательного параметра.

Я хочу использовать номер столбца для моего состояния. Когда я говорю HDR=TRUE в моей строке подключения, я мог бы использовать имя столбца, но в документе есть несколько повторяющихся имен, которые приводят к проблеме, что я получаю значение неправильного столбца. Переименование столбцов в документе было бы решением, но возможно ли это с использованием номеров столбцов?


Согласно комментариям Стива и Симо, я попробовал следующее:

SELECT * FROM [MY_SHEET$A3:M] WHERE [F1] IS NOT NULL;

Но я получаю то же сообщение об ошибке. Я попробовал это с HDR=TRUE и HDR=FALSE с [] arround F1 и без.


Здесь я загрузил xlsx-файл: https://ufile.io/fky0l Точный текст команды SELECT * FROM [Sheet1$A3:M] WHERE F1 IS NOT NULL Вот строка подключения

"Provider = Microsoft.ACE.OLEDB.12.0; Data Источник = D: \ stack.xlsx; Расширенные свойства = \ "Excel 12,0 Xml; HDR = TRUE \ ""

Вот кодексанипета:

var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\stack.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=TRUE\"";

using (var connection = new OleDbConnection(connectionString)
{
    connection.Open();
    using (var command = connection.CreateCommand())
    {
        command.CommandText = $"SELECT * FROM [Sheet1$A3:M] WHERE F1 IS NOT NULL";
        var reader = command.ExecuteReader();
        while(reader.Read())
        {
            var value = reader.Get<string>(0);
            Console.WriteLine(value);
        }
    }
}

1 Ответ

0 голосов
/ 15 января 2019

Проблемой была моя строка подключения. Возможные значения для HDR: ДА и НЕТ. Я использовал TRUE и FALSE. После изменения моей строки подключения на:

"Поставщик = Microsoft.ACE.OLEDB.12.0; Источник данных = D: \ stack.xlsx; Расширенный Свойства = \ "Excel 12.0 Xml; HDR = НЕТ \" "

Все работало ...

...