C# 如何更改datatable列的类型

C# 如何更改datatable列的类型,c#,types,datatable,C#,Types,Datatable,可能重复: 如果表已经有值,我们如何更改datatable列类型?在填充后更改datatable的数据类型是不可能的,但这方面的工作之一是克隆datatable并更改类型 第一条路 //clone datatable DataTable dtCloned = dt.Clone(); //change data type of column dtCloned.Columns[0].DataType = typeof(Int32); //import row to cloned data

可能重复:


如果表已经有值,我们如何更改datatable列类型?

在填充后更改datatable的数据类型是不可能的,但这方面的工作之一是克隆datatable并更改类型

第一条路

//clone datatable     
DataTable dtCloned = dt.Clone();
//change data type of column
dtCloned.Columns[0].DataType = typeof(Int32);
//import row to cloned datatable
foreach (DataRow row in dt.Rows) 
{
    dtCloned.ImportRow(row);
}

第二种方式

另一种方法是,先填充模式,然后再更改列数据类型和填充数据表

adapter.FillSchema(table, SchemaType.Source);
table.Columns[0].DataType = typeof (Int32);
adapter.Fill(table);

第三条道路

还有一种方法是

System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Rows.Add(1);

System.Data.DataTable dt2 = new System.Data.DataTable();
dt2.Columns.Add("Col1", typeof(string));
dt2.Load(dt.CreateDataReader(), System.Data.LoadOption.OverwriteChanges);

我想你可以用一些“SQL”代码来实现它。添加一个新列,用旧列的值更新它(如果需要,使用某种转换),然后删除数据库或数据集中的旧columndatatable?值得一提的是,当我从数据库中获取数据时,第二种方法适用于我,在填充DataTable之前,我设置了adapter.FillSchema。类似于使用(OleDbDataAdapter dataAdapter=new-OleDbDataAdapter(query,Con)){dataAdapter.FillSchema(DataTable,SchemaType.Source);DataTable.Columns[9]。DataType=typeof(string);dataAdapter.Fill(DataTable);}