C# 我可以使用OleDB获取Excel行号吗?

C# 我可以使用OleDB获取Excel行号吗?,c#,excel,oledb,C#,Excel,Oledb,我正在用C#(和SQL Server)处理Excel数据。我需要能够向最终用户报告任何有问题的excel行。这样做的自然方法是给出Excel的行号。然而,我不清楚如何获得该行编号以供参考 我有这样的想法: OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn); OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet

我正在用C#(和SQL Server)处理Excel数据。我需要能够向最终用户报告任何有问题的excel行。这样做的自然方法是给出Excel的行号。然而,我不清楚如何获得该行编号以供参考

我有这样的想法:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn);
OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet$," conn);
想要这样的东西:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM MyWorkSheet$", conn);
OleDbCommand cmd = new OleDbCommand("SELECT ExcelRowId,* FROM MyWorkSheet$," conn);
SQL的:ROW_NUMBER()确实有效,因为我无法提供适当的ORDER BY。
Excel的:ROW()在查询字符串中不可访问。

到目前为止,答案似乎是“否”,但我可以稍后创建它

int row;
foreach (DataTable t in ds.Tables)
{
    t.Columns.Add("RowNum",typeof(Int32));
    row = 1;
    foreach (DataRow r in t.Rows)
    {
        r["RowNum"] = row++;
    }
}

这似乎是可靠的,但它仍然感觉像是可以更自然地发生的事情。

以以下示例代码为基础():

int行;
foreach(ds.Tables中的数据表t)
{
t、 添加(“RowNum”,typeof(Int32));
行=1;
foreach(t.Rows中的数据行r)
{
r[“RowNum”]=行++;
}
}
Excel行号可以通过以下方式获得:

每个Datatable对象(

DataTable t;
)具有
DataTable.Rows属性

)返回一个
数据行集合类
。使用
DataRowCollection.IndexOf(DataRow)方法(

),您可以知道数据表中与Excel文件中的行号相关的行的索引。因此,用r.IndexOf(r)替换row++可以完成以下任务:

int行;
foreach(ds.Tables中的数据表t)
{
t、 添加(“RowNum”,typeof(Int32));
行=1;
foreach(t.Rows中的数据行r)
{
r[“RowNum”]=r.IndexOf(r);
}
}