SQL 查询 DataTable 以包含 headers
SQL query to DataTable to include headers
到目前为止,我有一个实用程序 class,其中包含一个名为 "getTable" 的函数,该函数采用字符串查询并返回一个数据表。现在我正试图让这些查询通过 excel 返回。只需将数据表的内容复制到 excel 就可以了 - 但是电子表格中没有 header 行来解释每一列是什么。
以下是我的尝试:
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;
}
上面几乎可以工作,但是当我尝试将列名(显然是字符串)写入数据表的 non-string 列时抛出异常。
有什么简单的方法可以实现这一目标吗?
当然,代码可能会出错,因为正如您所说,您正在将 none 兼容的数据类型分配到具有特定数据类型的一列中,如果您尝试将 Datatable 处的列现在接受特定数据类型change the column datatype to object
通过创建 table 的副本(克隆它)我认为问题会解决:
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;
}
到目前为止,我有一个实用程序 class,其中包含一个名为 "getTable" 的函数,该函数采用字符串查询并返回一个数据表。现在我正试图让这些查询通过 excel 返回。只需将数据表的内容复制到 excel 就可以了 - 但是电子表格中没有 header 行来解释每一列是什么。
以下是我的尝试:
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;
}
上面几乎可以工作,但是当我尝试将列名(显然是字符串)写入数据表的 non-string 列时抛出异常。
有什么简单的方法可以实现这一目标吗?
当然,代码可能会出错,因为正如您所说,您正在将 none 兼容的数据类型分配到具有特定数据类型的一列中,如果您尝试将 Datatable 处的列现在接受特定数据类型change the column datatype to object
通过创建 table 的副本(克隆它)我认为问题会解决:
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;
}