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

时间:2015-01-08 15:06:02

标签: c# sql-server datatable oledb oledbcommand

我使用以下代码从SELECT Sql查询中读取,然后从中填充DataTabledt是我的DataTable,cs是我的连接字符串并且query是Sql脚本):

using (OleDbConnection conn = new OleDbConnection(cs))
{
    conn.Open();
    OleDbCommand cmd = new OleDbCommand(query, conn);
    dt.Load(cmd.ExecuteReader());
    conn.Close();
}

它工作正常,我的DataTable将填充我的查询返回的内容。 但我希望我的DataTable只包含stringvarchar)值,无论我的查询是什么。 例如。如果我的查询说:

SELECT 1 AS ID, 'John' AS Name

然后我的Datatable的ID值将是一个整数,而我希望所有内容都是字符串。 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

// 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();

答案 1 :(得分:0)

没有直接的方法来指定结果应该是所有字符串。您不能简单地指示DataTable.Load将每个类型转换为字符串。

您的选择是:

  • 通过迭代将DataTable中的每个值转换为字符串 每一行和每一行。
  • 如果可能的话,将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());
}