oledb query-condition 按数字列

oledb query-condition with column by number

我正在通过 oledb 阅读 excel-document。当没有标题行时,如何使用查询中的列来设置条件?

我想做这样的事情:

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

当我尝试这个时,出现以下错误:

No value was specified for at least one required parameter.

我想使用 column-number 来满足我的条件。当我在我的连接字符串中说 HDR=TRUE 时,我可以使用 column-name,但是文档中有一些 duplicate-names 导致了问题,我得到了错误列的值。重命名文档中的列将是一个解决方案,但是使用列号可以吗?


根据 Steve 和 Simo 的评论,我尝试了以下方法:

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

但我也一样error-message。我用 HDR=TRUEHDR=FALSE WIth [] arround F1 和 wihtout.

试了一下

这里我上传了xlsx-file:https://ufile.io/fky0l 确切的 command-text 是 SELECT * FROM [Sheet1$A3:M] WHERE F1 IS NOT NULL 这是连接字符串

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\stack.xlsx;Extended Properties=\"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);
        }
    }
}

问题是我的连接字符串。 HDR 的可能值为 YES 和 NO。我使用的是 TRUE 和 FALSE。将我的连接字符串更改为:

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

一切正常...