我一直在使用我导入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'。
如果你能帮助我,我会非常感激:)
答案 0 :(得分:1)
OleDbConnection具有GetOleDbSchemaTable命令,允许您仅检索列列表。示例代码是
DataTable myColumns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "Sheet1$", null });
这将返回一个DataTable,其中填充了列信息(名称,类型等)。然后,您可以通过Rows集合循环检查“COLUMN_NAME”列,例如
foreach (DataRow dtRow in myColumns.Rows)
{
if (dtRow["COLUMN_NAME"].ToString() == "serieN") // Do your stuff here ....
}
答案 1 :(得分: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;
}