DataTable诡异的事情
今天在工作中遇到一个诡异的问题,代码如下:
private DataTable CovertDataType(DataTable orgDataTable, string colNames, string convertCol, YstPack.Common.ColumnType convertDataType)
{
DataTable dt = new DataTable();
//克隆表结构
dt = orgDataTable.Clone();
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName == convertCol)
{
//修改列类型
column.DataType = typeof(Guid);
}
}
string[] colArry = colNames.Split(',');
foreach (DataRow dr in orgDataTable.Rows)
{
DataRow newdr = dt.NewRow();
foreach (string str in colArry)
{
if (str == convertCol)//转换列数据类型
{
switch (convertDataType)
{
case YstPack.Common.ColumnType.唯一标识:
newdr[str] = new Guid(dr[str].ToString());
break;
default:
break;
}
}
else
{
newdr[str] = dr[str];//不需要转化,直接赋值,但是这里就抛出异常!
}
}
dt.Rows.Add(newdr);
}
return dt;
}

运行 foreach (string str in colArry)循环第一次能成功,但是第二次就报列“X”不属于表异常 !不知道这是不是一个bug!
后面把代码改成如下又正确了:
private DataTable CovertDataType(DataTable orgDataTable, string colNames, string convertCol, YstPack.Common.ColumnType convertDataType)
{
DataTable dt = new DataTable();
try
{
//克隆表结构
dt = orgDataTable.Clone();
foreach (DataColumn column in dt.Columns)
{
if (column.ColumnName == convertCol)
{
//修改列类型
column.DataType = typeof(Guid);
}
}
string[] colArry = colNames.Split(',');
foreach (DataRow dr in orgDataTable.Rows)
{
DataRow newdr = dt.NewRow();
for (int i = 0; i < colArry.Length; i++)
{
if (colArry[i].ToString() == convertCol)//转换列数据类型
{
newdr[i] = new Guid(dr[i].ToString());
}
else
{
newdr[i] = dr[i];
}
}
dt.Rows.Add(newdr);
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
return dt;
}
浙公网安备 33010602011771号