C# 如何使用列名从datatable获取数据

C# 如何使用列名从datatable获取数据,c#,excel,C#,Excel,我有一种情况,我用excel文件加载数据集。所有工作表都作为datatable加载,相应的工作表名称作为datatable名称。我试图做的是使用列名获取这个datatable值。但我并没有说错话 “列'Execute'不属于表Sheet1” 将excel加载到datatabel时,我使用了HDR=YES和IMEX=1。我还尝试了HDR=NO。没有任何效果 下面的代码是将excel写入datatable foreach (Microsoft.Office.Interop.Excel.Workshe

我有一种情况,我用excel文件加载数据集。所有工作表都作为datatable加载,相应的工作表名称作为datatable名称。我试图做的是使用列名获取这个datatable值。但我并没有说错话

“列'Execute'不属于表Sheet1”

将excel加载到datatabel时,我使用了HDR=YES和IMEX=1。我还尝试了HDR=NO。没有任何效果

下面的代码是将excel写入datatable

foreach (Microsoft.Office.Interop.Excel.Worksheet wsheet in workbook.Worksheets)
{

    string sql1 = "SELECT * FROM [" + wsheet.Name + "$]";
    OleDbCommand selectCMD1 = new OleDbCommand(sql1, SQLConn);
    SQLAdapter.SelectCommand = selectCMD1;

    SQLAdapter.Fill(dataset.Tables.Add(wsheet.Name));

 }
excel中的数据完美地加载到每个工作表中。但按列名获取它是一个问题


任何建议请

尝试通过
wsheet.Name.Columns
枚举(在调试模式和/或控制台中)并提取表的列名-确保它包含您期望的列名(以及您期望的格式)

这是我使用的代码,工作正常。我假设您正在使用互操作来循环浏览工作表,以确保它们处于有序状态

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename +
    "; Extended Properties=\"Excel 12.0 XML;HDR=YES\"";
DataSet dsValues = new DataSet();

using (OleDbConnection conn = new OleDbConnection(connectionString))
{
    conn.Open();

    using (OleDbCommand cmd = conn.CreateCommand())
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter())
        {
            foreach (Excel.Worksheet wsheet in workbook.Worksheets)
            {
                cmd.CommandText = "SELECT * FROM [" + wsheet.Name + "$]";
                adapter.SelectCommand = cmd;
                adapter.Fill(dsValues.Tables.Add(wsheet.Name));
            }
        }
    }
}
如果
OleDbDataAdapter
在每列的顶部单元格中找不到文本,则它将返回到
F1
F2
F3
。。。缺少标头名称的符号。例如,如果我的Excel工作表如下所示:

Header1           Header3
Value1   Value3   Value5
Value2   Value4   Value6
然后在
DataTable
中,我将得到名为
Header1
F2
Header3
的列

您还需要确保指定为标题行的行在其上方的任何行中都没有文本,否则将得到一堆
Fn
类型的标题,然后是其他意外的文本作为标题名。例如:

      This is my table
Header1  Header2  Header3
Value1   Value3   Value5
Value2   Value4   Value6

将以
这是我的表
F2
F3
等标题结束在数据表中。

我不确定这与它有多大关系,但我想知道为什么您使用的是
SQLDataAdapter
,而不是
OleDbDataAdapter
?我刚刚尝试了您的代码,但是使用了
OleDbDataAdapter
,效果很好(即,我得到了列名)。实际上,我的代码是针对oledb的,我创建的对象类似于这个OleDbDataAdapter SQLAdapter=new OleDbDataAdapter();我知道这很疯狂。。。但是谢谢你,你给了我一个答案,它成功了。对,我明白了。我想你可能在用。不管怎样,很高兴我能帮上忙。