Sql 无法从select语句中包含where子句的excel工作表中读取数据

Sql 无法从select语句中包含where子句的excel工作表中读取数据,sql,vb.net,excel,Sql,Vb.net,Excel,我试图从excel工作表中读取数据,但有一个例外,即没有为一个或多个我不理解的必需参数提供值。以下是错误指向的代码: Dim MyConnection As System.Data.OleDb.OleDbConnection Dim DtSet As System.Data.DataSet Dim MyCommand As System.Data.OleDb.OleDbDataAdapter MyConnection = New System.Data.OleDb.OleDbConnection

我试图从excel工作表中读取数据,但有一个例外,即没有为一个或多个我不理解的必需参数提供值。以下是错误指向的代码:

Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim DtSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
MyConnection = New System.Data.OleDb.OleDbConnection _
    ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\Staff Contracts.xlsx; Extended Properties=""Excel 12.0;HDR=NO""")
MyCommand = New System.Data.OleDb.OleDbDataAdapter _
    ("select * from [Staff Contracts$A4:K14] where I=176", MyConnection)
MyCommand.TableMappings.Add("Table", "TestTable")
DtSet = New System.Data.DataSet
MyCommand.Fill(DtSet)

异常指向最后一行
MyCommand.Fill(DtSet)
,这表明select语句存在问题。以前,我的代码读取数据并在select中不显示where子句,但当我添加where语句时,它只能从列
I
的值等于176的行中读取数据,相反,它给出了一个异常,表明某些必需的参数缺少一个值。如果HDR=NO,I列将变为F9,因为oledb将命名为F1列。。Fn作为其内部参考

MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Staff Contracts$A4:K14] where F9=176", MyConnection);

在这种情况下,OLEDB驱动程序将为选择中的每一列(F1到Fn)创建列名。因此,如果您将范围“A4:K14”更改为“B4:K14”,则F9列将为F8。

这可能是我添加where statmt时不工作的原因吗?您确定“where I=176”的存在是它工作和错误之间的唯一区别吗?I列的数据类型如何?你确定它不是文本,标准应该是“where I='176'”?非常感谢@Romil。使用F9可以让它工作。你介意告诉我为什么
I
不起作用,必须用F9替换吗。在我看来,F9就像没有标题时datagridview的占位符。它是?