【问题标题】:Failing to read data from an excel sheet with where clause in select statement无法从选择语句中带有 where 子句的 Excel 工作表中读取数据
【发布时间】:2012-05-04 21:07:35
【问题描述】:

我正在尝试从 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),这表明我的选择语句存在问题。以前我的代码读取数据并在选择中没有 where 子句的情况下显示它,但是当我添加 where 语句以便它只能从列 I 的值等于 176 的行中读取数据时,它而是给出一个异常,表明某些必需的参数缺少值

【问题讨论】:

  • 这会是我添加 where statmt 时无法正常工作的原因吗?
  • 您确定“where I=176”的存在是它工作和错误之间的唯一区别吗? I列的数据类型呢?你确定不是文本,条件应该是“where I='176'”?

标签: sql vb.net excel


【解决方案1】:

在 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。

【讨论】:

  • 非常感谢@Romil。使用 F9 让它工作。你介意告诉我为什么I 不起作用,必须用 F9 替换。在我看来,F9 就像没有标题时 datagridview 的占位符。是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多