我从我的数据库中获取一个带有一个NULL列的数据表。默认情况下,数据类型为Int32。 如果我改变数据类型如下所示:
一旦有数据
,就无法更改列的DataType
_object.datatable.Columns[coll].DataType = typeof (decimal);
有没有办法让列成为十进制或更改代码中的数据类型?
答案 0 :(得分:1)
我偶然发现了几次。
您有三种选择。
自己创建列
var table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("col1", typeof(decimal));
DataAdapter.Fill(table);
如果您使用DataAdapter或DataReader填充表格,那么只有在您没有自己完成之前才会自动创建列
如果关系需要不同的DataType,只需添加表达式列
table.Columns.Add("col1_decimal", typeof(decimal), "col1");
该列将是只读的,但适用于关系。
添加另一列,复制数据,删除第一列,重命名新列
table.Columns.Add("tmp", typeof(decimal));
foreach(var row in table.Rows())
row["tmp"] = row["col1"];
table.Columns.Remove(table.Columns["col1"]);
table.Columns["tmp"].ColumnName = "col1";
这可能是许多行的性能瓶颈。
答案 1 :(得分:0)
您无法将整个列自动转换为新的datatytpe。
您可以在读取它时转换特定值:
decimal dec = (decimal)(int)_object.datatable[rownum][col1];
注意:如果实际值是Int32,则需要先将其转换为int,然后才能转换为十进制。