我正在通过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=TRUE
和HDR=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);
}
}
}
答案 0 :(得分:0)
探针是我的连接字符串。 HDR的可能值为YES和NO。我使用的是TRUE和FALSE。将我的连接字符串更改为:
“ Provider = Microsoft.ACE.OLEDB.12.0;数据源= D:\ stack.xlsx;已扩展 属性= \“ Excel 12.0 Xml; HDR =否\”“
一切正常...