繁体   English   中英

C# 从数据表中的字符串获取数据类型

[英]C# GetDataType from String in DataTable

我有一个目前只填充字符串的 DataTable。 我想从 DataTable Columns 中获取 DataType 并插入 DataType。

DataTable 示例,所有行名可以是随机的。

在此处输入图像描述

我想从示例列“age”中获得 int,其余的仍然是字符串。

目前 Age 是一个字符串,我可以尝试解析整个列吗? 或者这是一个糟糕的解决方案。

有没有一种简单的方法可以做到这一点?

加载表后,您将无法更改数据类型。 从原始表中克隆当前DataTable,找到age列,将数据类型从字符串更改为int,然后导入行。

重要提示:以上假设,在这种情况下,年龄列可以表示每一行的一个 int,如果不是,您需要在使用 ImportRow 之前执行正确的断言。

这是一个概念示例

private static void ChangeColumnType()
{
    DataTable table = new DataTable();

    table.Columns.Add("Seq", typeof(string));
    table.Columns.Add("age", typeof(string));
    table.Columns.Add("name", typeof(string));

    table.Rows.Add("1", "22", "Smith");
    table.Rows.Add("2", "46", "Jones");

    DataTable cloned = table.Clone();
    bool found = false;
    for (int index = 0; index < table.Columns.Count; index++)
    {
        if (string.Equals(table.Columns[index].ColumnName, "age", 
                StringComparison.CurrentCultureIgnoreCase))
        {
            cloned.Columns["age"]!.DataType = typeof(int);
            found = true;
        }
    }

    if (!found) return;
    foreach (DataRow row in table.Rows)
    {
        cloned.ImportRow(row);
    }

    foreach (DataColumn column in cloned.Columns)
    {
        Console.WriteLine($"{column.ColumnName}\t{column.DataType}");
    }


}

编辑:当年龄无法转换为整数时,一种可能的方法可以避免出现问题。

if (!found) return;
foreach (DataRow row in table.Rows)
{
    if (int.TryParse(row.Field<string>("age"), out _))
    {
        cloned.ImportRow(row);
    }
    else
    {
        Console.WriteLine($"Failed: {string.Join(",", row.ItemArray)}");
    }
}

抱歉,如果我不理解您的问题,但我会尝试回答我认为您在下面提出的问题:

如果您只是想确定数据类型,那么我建议您取该列中的第一个值(因为您显然不需要全部检查它们。)并执行 tryparse 以确定它是否与 int 兼容例如.

如果您使用 getType,它可能会返回一个字符串。

如果您尝试将整个列设置为数据类型,那么您可能应该在通过构造函数或以编程方式生成表的阶段执行此操作,如第一个示例所示

// Create second column.
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "ParentItem";
column.AutoIncrement = false;
column.Caption = "ParentItem";
column.ReadOnly = false;
column.Unique = false;
// Add the column to the table.
table.Columns.Add(column);

来自 Microsoft 的完整示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM