如何在DataTable中更改DataColumn的数据类型?

135

我有:

DataTable Table = new DataTable;
SqlConnection = new System.Data.SqlClient.SqlConnection("Data Source=" + ServerName + ";Initial Catalog=" + DatabaseName + ";Integrated Security=SSPI; Connect Timeout=120");

SqlDataAdapter adapter = new SqlDataAdapter("Select * from " + TableName, Connection);
adapter.FillSchema(Table, SchemaType.Source);
adapter.Fill(Table);

DataColumn column = DataTable.Columns[0];

我想做的是:

假设当前column.DataType.Name"Double",我希望变成"Int32"

我该怎么做?

13个回答

1
DataTable DT = ...
// Rename column to OLD:
DT.Columns["ID"].ColumnName = "ID_OLD";
// Add column with new type:
DT.Columns.Add( "ID", typeof(int) );
// copy data from old column to new column with new type:
foreach( DataRow DR in DT.Rows )
{ DR["ID"] = Convert.ToInt32( DR["ID_OLD"] ); }
// remove "OLD" column
DT.Columns.Remove( "ID_OLD" );

0

你可以添加一个不同数据类型的列,然后复制数据并删除旧列。

TB.Columns.Add("columna1", GetType(Integer))    
TB.Select("id=id").ToList().ForEach(Sub(row) row("columna1") = row("columna2"))    
TB.Columns.Remove("columna2")

1
你应该在回答中添加一些上下文,仅有代码的答案被视为低质量,没有价值。 - Nawed Nabi Zada
我理解它。它是否有效是另一回事。 - AMissico

0
你不能直接在C#中更改DataTable中列的类型。但是,你可以创建一个具有所需类型的新列,将数据从旧列复制到新列,然后删除旧列。
DataColumn oldColumn = dataTable.Columns["ColumnName"];
DataColumn newColumn = new Column("NewColumnName", typeof(NewType));
dataTable.Columns.Add(NewColumn);

foreach(DataRow row in dt.Rows)
{
    row["NewColumnName"] = Convert.ChangeType(row["ColumnName"], typeof(NewType));
}

dataTable.Columns.Remove("ColumnName");
newColumn.ColumnName = "ColumnName";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接