3

我一直在使用一个程序,在该程序中我导入了 2 个 excel 文件,而这些 excel 文件具有不同的列名。所以用户可能会导入错误的 excel 文件(使用其他列名),而我的问题是我正在使用 OledbDataAdapter 从 excel 中读取数据,因此我必须指定每列的名称,因此当用户导入错误的文件时,程序停止工作(因为程序找不到正确的列来获取数据)。

好的,所以我的问题是,有没有办法检查特定的 Excel 表中是否存在列?因此,如果用户导入的文件中不存在该列,我将能够做一些事情......

这是我的代码的一部分:

OleDbCommand command1 = new OleDbCommand(
    @"SELECT DISTINCT serie FROM [Sheet1$] 
      WHERE serie =@MercEnInventario AND serie IS NOT NULL", connection);
command1.Parameters.Add(new OleDbParameter("MercEnInventario", MercInv));
string serieN = Convert.ToString(command1.ExecuteScalar());
readerOle = command1.ExecuteReader();
readerOle.Close();

当我尝试为字符串“serieN”赋值时出现 OleDbException,因为用户导入的 Excel 文件中不存在列名“serie”。

如果你能帮助我,我将不胜感激:)

4

2 回答 2

1

OleDbConnection 具有GetOleDbSchemaTable命令,允许您仅检索列列表。一个示例代码是

DataTable myColumns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "Sheet1$", null });

这将返回一个 DataTable,其中填充了列信息(名称、类型等)。然后,您可以循环通过行集合检查“COLUMN_NAME”列,例如

foreach (DataRow dtRow in myColumns.Rows)
{
   if (dtRow["COLUMN_NAME"].ToString() == "serieN") // Do your stuff here ....
}
于 2013-07-23T20:35:33.330 回答
0

这个怎么样:

public bool FieldExists(OleDbConnection connection, string tabName, string fieldName)
{
  var adapter = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", tabName), connection);
  var ds = new DataSet();
  adapter.Fill(ds, tabName);

  foreach (var item in ds.Tables[tabName].Rows[0].ItemArray)
  {
    if (item.ToString() == fieldName)
      return true;
  }
  return false;
}
于 2013-07-23T20:40:32.930 回答