从数据表中提取数据

时间:2015-07-14 13:29:55

标签: c#

我使用以下代码从工作簿中的所有工作表中提取数据:

foreach (var sheetName in GetExcelSheetNames(connectionString))
            {
                if (sheetName.Contains("_"))
                {
                }
                else
                {
                    using (OleDbConnection con = new OleDbConnection(connectionString))
                    {

                        var dataTable = new DataTable();
                        string query = string.Format("SELECT  * ,{0} as sheetName FROM [{0}]", sheetName);
                        con.Open();
                        OleDbDataAdapter adapter = new OleDbDataAdapter(query, con);
                        try
                        {
                            adapter.Fill(dataTable);
                            ds.Tables.Add(dataTable);
                        }
                        catch { }
                    }
                }

我不能只计算DataTable中数据的存储方式:工作表名称是否已添加为列?我该如何提取它?

  foreach (DataTable dt in ds.Tables)
                    {
                            using (SqlConnection con = new SqlConnection(consString))
                            {
                                con.Open();
                                for (int i = 0; i < dt.Rows.Count; i++)
                                {

                                    for (int j = 0; j < dt.Columns.Count; j ++)
                                    {
//what should I write here ?
                                    }
                                 }
                              }

2 个答案:

答案 0 :(得分:0)

假设dt是您的数据表变量,

dt.Rows[row index][column index]

dt [2] [4] - &gt;将引用第2行,第4个单元格

我不确定,但也许工作表名称可能存储在dt.TableName

答案 1 :(得分:0)

要使用oledb获取工作表名称,您需要使用看起来像这样的代码(thanks to this SO post and answer):

DataTable dtSheets = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
     List<string> sheets= new List<string>();
     foreach (DataRow dr in dtSheets.Rows)
     {
        if (dr["TABLE_NAME"].ToString().Contains("$"))//checks whether row contains '_xlnm#_FilterDatabase' or sheet name(i.e. sheet name always ends with $ sign)
        {
             sheets.Add(dr["TABLE_NAME"].ToString());
        } 
     }

以下是从数据表中访问值的方法:

var someValue = dt.Rows[i][j]

您需要在当前数据表(dt)的行index(i)的行index(j)处获取该项。

相反,您也可以使用列的名称。

var someValue = dt.Rows[i]["columnName"]