如何更改DataTable中列的数据类型
How to change data type of a column in DataTable
我正在使用以下代码从 SELECT
Sql 查询中读取,然后从中填充我的 DataTable
(dt
是我的数据表,cs
是我的连接字符串,query
是 Sql 脚本):
using (OleDbConnection conn = new OleDbConnection(cs))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
dt.Load(cmd.ExecuteReader());
conn.Close();
}
它工作正常,我的 DataTable
将填充我的查询 returns。
但我希望我的 DataTable
只包含 string
(varchar
) 值,而不管我的查询是什么。
例如。如果我的查询是:
SELECT 1 AS ID, 'John' AS Name
然后我的数据表的 ID 值将是一个整数,而我希望所有内容都是字符串。
我怎样才能做到这一点?
没有直接的方法来指定结果应全部为字符串。您不能简单地指示 DataTable.Load
将每种类型都转换为字符串。
您的选择是:
- 通过迭代将
DataTable
中的每个值转换为字符串
每行和每列。
- 如果可能的话,convert/cast SQL 查询中的每一列
varchar
这可以帮助您入门。
DataTable dtAllString = new DataTable();
foreach (DataColumn column in dt.Columns)
{
dtAllString.Columns.Add(column.ColumnName, typeof(string));
}
foreach (DataRow row in dt.Rows)
{
List<string> columnValues = new List<string>();
foreach (DataColumn col in dt.Columns)
{
columnValues.Add(Convert.ToString(row[col]));
}
dtAllString.Rows.Add(columnValues.ToArray());
}
// Create a temporary table
DataTable dtNew = new DataTable();
for(int i=0;dt.Columns.Count;i++)
{
dtNew.Columns.Add(dt.Columns[i].ColumnName,typeof(string));
}
// Add data to new table
for(int i=0;dt.Rows.Count;i++)
{
dtNew.Rows.Add();
for(int j=0;dt.Columns.Count;j++)
{
dtNew.Rows[i][j] = dt.Rows[i][j];
}
}
dt=null;
dt=dtNew.Copy();
我正在使用以下代码从 SELECT
Sql 查询中读取,然后从中填充我的 DataTable
(dt
是我的数据表,cs
是我的连接字符串,query
是 Sql 脚本):
using (OleDbConnection conn = new OleDbConnection(cs))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand(query, conn);
dt.Load(cmd.ExecuteReader());
conn.Close();
}
它工作正常,我的 DataTable
将填充我的查询 returns。
但我希望我的 DataTable
只包含 string
(varchar
) 值,而不管我的查询是什么。
例如。如果我的查询是:
SELECT 1 AS ID, 'John' AS Name
然后我的数据表的 ID 值将是一个整数,而我希望所有内容都是字符串。 我怎样才能做到这一点?
没有直接的方法来指定结果应全部为字符串。您不能简单地指示 DataTable.Load
将每种类型都转换为字符串。
您的选择是:
- 通过迭代将
DataTable
中的每个值转换为字符串 每行和每列。 - 如果可能的话,convert/cast SQL 查询中的每一列
varchar
这可以帮助您入门。
DataTable dtAllString = new DataTable();
foreach (DataColumn column in dt.Columns)
{
dtAllString.Columns.Add(column.ColumnName, typeof(string));
}
foreach (DataRow row in dt.Rows)
{
List<string> columnValues = new List<string>();
foreach (DataColumn col in dt.Columns)
{
columnValues.Add(Convert.ToString(row[col]));
}
dtAllString.Rows.Add(columnValues.ToArray());
}
// Create a temporary table
DataTable dtNew = new DataTable();
for(int i=0;dt.Columns.Count;i++)
{
dtNew.Columns.Add(dt.Columns[i].ColumnName,typeof(string));
}
// Add data to new table
for(int i=0;dt.Rows.Count;i++)
{
dtNew.Rows.Add();
for(int j=0;dt.Columns.Count;j++)
{
dtNew.Rows[i][j] = dt.Rows[i][j];
}
}
dt=null;
dt=dtNew.Copy();