如何更改DataTable中列的数据类型

How to change data type of a column in DataTable

我正在使用以下代码从 SELECT Sql 查询中读取,然后从中填充我的 DataTabledt 是我的数据表,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();