0

我将 csv 文件导入到数据表中,不幸的是,我将数据放入字符串列中,即使是带有数字的列。

所以我必须将某些列的格式(除非有其他方式)转换为日期时间、整数或双精度,为什么我写了以下代码:

Public Sub ChangeFieldType(ByRef dataTable As DataTable, ByVal fieldIndex As Integer, ByVal newType As Type)
    Dim newDataTable As DataTable = dataTable.Clone

    newDataTable.Columns(fieldIndex).DataType = newType
    For Each row As DataRow In dataTable.Rows
        newDataTable.ImportRow(row)
    Next
    dataTable = newDataTable
End Sub

但是有一些空单元格的字符串格式是 vbnullstring。我的问题是有没有比我的代码更简单的方法,如果没有,是否有比转换空单元格更快的方法:

Public Sub ChangeFieldType(ByRef dataTable As DataTable, ByVal fieldIndex As Integer, ByVal newType As Type)
    Dim newDataTable As DataTable = dataTable.Clone

    newDataTable.Columns(fieldIndex).DataType = newType
    For Each row As DataRow In dataTable.Rows
        If row(fieldIndex) = vbNullString Then
            row(fieldIndex) = Nothing
        End If
        newDataTable.ImportRow(row)
    Next
    dataTable = newDataTable
End Sub

因为这非常非常慢。

谢谢

4

2 回答 2

1

导入 csv 文件时,如果您事先已经知道列类型,那么您应该用这些列制作一个表格,然后填充数据。克隆表然后再次填充数据是非常缓慢的过程,尤其是在数据很大的情况下

您可以参考以下 http://social.msdn.microsoft.com/Forums/windows/en-US/34b6a1e8-5103-42a3-aa45-cdc0cea461f2/importing-csv-file-to-datatable-problem-with-转换数据类型

于 2013-08-04T17:48:50.107 回答
0

使用以下代码转换 DataTable 中列的数据类型

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable table = GetTable();

        DataColumn dc = new DataColumn("MyDate", Type.GetType("System.String"));
        table.Columns.Add(dc);

        foreach (DataRow row in table.Rows)
        {
            row["MyDate"] =Convert.ToDateTime(row["Date"].ToString()).ToString("dd-MM-yyyy");
        }

        GridView1.DataSource = table;
        GridView1.DataBind();
    }



    static DataTable GetTable()
    {
        // Here we create a DataTable with four columns.
        DataTable table = new DataTable();
        table.Columns.Add("ID", typeof(int));
        table.Columns.Add("SortName", typeof(string));
        table.Columns.Add("FullName", typeof(string));
        table.Columns.Add("Date", typeof(DateTime));

        // Here we add five DataRows.
        table.Rows.Add(25, "Geli", "Smruti", DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
        table.Rows.Add(50, "Gelu", "Ramesh", DateTime.Now.AddDays(2).ToString("yyyy-MM-dd"));
        table.Rows.Add(10, "Nitu", "Mama", DateTime.Now.AddDays(3).ToString("yyyy-MM-dd"));
        table.Rows.Add(21, "Babu", "Gelu", DateTime.Now.AddDays(4).ToString("yyyy-MM-dd"));        
        return table;
    }
}

将列添加到现有数据表并将数据更新到要更改数据类型的新列。

于 2014-12-18T13:29:46.540 回答