我将一个csv文件导入到一个数据表中,遗憾的是,这个数据表将我的数据放入字符串列中,即使是那些有数字的列。
所以我必须将某些列的格式(除非有其他方法)转换为datetime,integer或double,为什么我编写了以下代码:
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
因为这非常慢。
由于
答案 0 :(得分:1)
如果您事先已经知道了列类型,那么在导入csv文件时,您应该创建一个包含这些列的表,然后填充数据。克隆表然后再次填充数据是一个非常缓慢的过程,尤其是在数据很大的情况下
答案 1 :(得分: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;
}
}
将列添加到现有DataTable&将数据更新为要更改DataType的新列。