【问题标题】:SQL query to DataTable to include headers对 DataTable 的 SQL 查询以包含标题
【发布时间】:2015-04-07 11:14:19
【问题描述】:

到目前为止,我有一个实用程序类,其中包含一个名为“getTable”的函数,该函数接受一个字符串查询并返回一个数据表。现在我试图让这些查询通过excel返回。只需将数据表的内容复制到 excel 中就可以了 - 但是电子表格上没有标题行来解释每一列是什么。

以下是我的尝试:

public static DataTable getTable(String sql, bool includeHeaderRow)
    {
        DataTable table = new DataTable();
        using (SqlDataAdapter adpt = new SqlDataAdapter(sql, getConn()))
        {
            adpt.Fill(table);

            if (includeHeaderRow)
            {
                DataRow headerRow = table.NewRow();

                for (int i = 0; i < table.Columns.Count; i++)
                {
                    headerRow[i] = table.Columns[i].ColumnName;
                }

                table.Rows.InsertAt(headerRow, 0);
            }
        }
        return table;
    }

上述方法几乎可以工作,但是当我尝试将列名(显然是字符串)写入数据表的非字符串列时会引发异常。

有什么简单的方法可以实现这一点吗?

【问题讨论】:

标签: c# sql sql-server datatable


【解决方案1】:

当然,代码可能会出错,因为正如您所说,您将不兼容的数据类型分配到具有特定数据类型的列中,如果您尝试通过创建表的副本change the column datatype to object(克隆它)我认为问题会解决:

public static DataTable getTable(String sql, bool includeHeaderRow)
    {
        DataTable table = new DataTable();
        using (SqlDataAdapter adpt = new SqlDataAdapter(sql, getConn()))
        {
            adpt.Fill(table);


            if (includeHeaderRow)
            {    
                DataTable dt = table.Clone();
                for (int i = 0; i < table.Columns.Count; i++)
                {
                  dt.Columns[i].DataType = typeof(Object);
                }
                foreach (DataRow row in table.Rows) 
                {
                   dt.ImportRow(row);
                }
                DataRow headerRow = dt.NewRow();
                for (int i = 0; i < table.Columns.Count; i++)
                {
                    headerRow[i] = table.Columns[i].ColumnName;
                }

                dt.Rows.InsertAt(headerRow, 0);
            }
        }
        return dt;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 2013-05-19
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多