如何在包含数据的DataTable中更改列的数据类型?

4
如何在VB.NET中更改已填充的输入数据表中数据列的数据类型?然后,我将把代码放在一个Blue Prism Code Stage中,其中我有一个输入:
  1. 我想要更改数据类型的字段(列)的名称

  2. 我想要转换的数据类型

  3. 输入集合(数据表)

例如:

Dim InputDT As New DataTable
InputDT.Columns.Add(New DataColumn("test"))
dt.Columns("test").DataType = GetType(Date)

1
在我们能够帮助你之前,你需要添加一些你已经尝试过的示例代码。 - MikeS159
你能否编辑你的问题并包含这个信息? 请查看帮助文档(https://stackoverflow.com/help/how-to-ask),如果你的问题格式良好,那么你更有可能得到答案。 - MikeS159
1个回答

9
如果DataTable已经填充了数据,则不能更改其任何列的类型。如果您尝试这样做,将收到一个非常直接的ArgumentException消息:

无法在有数据的情况下更改列的DataType。

创建一个新的DataTable(或克隆现有的DataTable),更改列的类型,然后使用旧DataTable中的数据填充它是一个很好的替代方案。
类似这样的代码应该可以工作:
Dim InputDT As New DataTable
InputDT.Columns.Add(New DataColumn("test"))
InputDT.Rows.Add("1/1/2018")

Dim clonedDT As DataTable = InputDT.Clone()
clonedDT.Columns("test").DataType = GetType(Date)
For Each row As DataRow In InputDT.Rows
    clonedDT.ImportRow(row)
Next

请注意,为了使此方法有效,该列中的数据必须与新类型匹配。如果现有值无法转换为新类型,则可以使用以下代码进行错误处理:Try.. Catch语句:

' ...
Try
    For Each row As DataRow In InputDT.Rows
        clonedDT.ImportRow(row)
    Next
Catch ex As ArgumentException
    ' An error occurred, use 'ex.Message' to display the error message. Example:
    Console.WriteLine(ex.Message)
End Try

当数据类型无法转换时,我该如何处理可能出现的异常? - Dalicino
当现有值无法转换为新类型时,您到底希望发生什么? - 41686d6564 stands w. Palestine
我想在BluePrism中获得一条消息,提醒我“旧数据类型无法转换为新数据类型,请选择其他数据类型”,但我不想在我尝试转换的所有列和行中标记异常。 - Dalicino
您可以使用Try.. Catch语句来捕获和处理错误。我实际上不熟悉BluePrism,所以希望您知道如何显示警告。无论如何,请检查我的编辑以了解如何获取错误消息。 - 41686d6564 stands w. Palestine
我正在按照您的指示更改数据类型列,但使用clone()创建的新数据表并没有更改数据类型,而是保留了标题和记录。我该如何解决?问题可能是由于clone()引起的吗? - Dalicino
你说的“不改变数据类型”是什么意思?你确定没有忘记调用 clonedDT.Columns("test").DataType = '.... 吗? - 41686d6564 stands w. Palestine

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