带数字列的oledb查询条件

时间:2019-01-14 13:34:22

标签: c# excel oledb

我正在通过oledb阅读Excel文档。如果没有标题行,如何使用查询中的列设置条件?

我想做这样的事情:

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

尝试此操作时,出现以下错误:

  

没有为至少一个必需参数指定值。

我要使用列号作为条件。当我在连接字符串中说HDR=TRUE时,我可以使用列名,但是文档中有一些重复名会导致问题,即我得到了错误的列的值。重命名文档中的列将是一个解决方案,但是使用列号是否可以实现?


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

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

但是我得到了同样的错误信息。我用HDR=TRUEHDR=FALSE[]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 :(得分:0)

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

  

“ Provider = Microsoft.ACE.OLEDB.12.0;数据源= D:\ stack.xlsx;已扩展   属性= \“ Excel 12.0 Xml; HDR =否\”“

一切正常...