null列更改数据类型

时间:2012-02-29 14:34:48

标签: c# database datatable

我从我的数据库中获取一个带有一个NULL列的数据表。默认情况下,数据类型为Int32。 如果我改变数据类型如下所示:

  

一旦有数据

,就无法更改列的DataType
_object.datatable.Columns[coll].DataType = typeof (decimal);

有没有办法让列成为十进制或更改代码中的数据类型?

2 个答案:

答案 0 :(得分:1)

我偶然发现了几次。

您有三种选择。

  1. 自己创建列

    var table = new DataTable();
    table.Columns.Add("id", typeof(int));
    table.Columns.Add("col1", typeof(decimal));
    
    DataAdapter.Fill(table);
    
  2. 如果您使用DataAdapter或DataReader填充表格,那么只有在您没有自己完成之前才会自动创建列

    1. 如果关系需要不同的DataType,只需添加表达式列

      table.Columns.Add("col1_decimal", typeof(decimal), "col1");
      
    2. 该列将是只读的,但适用于关系。

      1. 添加另一列,复制数据,删除第一列,重命名新列

        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";
        
      2. 这可能是许多行的性能瓶颈。

答案 1 :(得分:0)

您无法将整个列自动转换为新的datatytpe。

您可以在读取它时转换特定值:

decimal dec = (decimal)(int)_object.datatable[rownum][col1];

注意:如果实际值是Int32,则需要先将其转换为int,然后才能转换为十进制。