Rém*_*émi 83 c# datatable argumentexception
我有一个使用csv文件内容生成的数据.我使用其他信息将csv的某些列(现在在数据表中)映射到用户需要填充的信息.
在最好的世界中,映射总是可能的.但这不是现实......所以在我尝试映射数据表列值之前,我需要检查该列是否存在.如果我不这样做,请检查我是否有ArgumentException.
当然我可以用这样的代码来检查:
try
{
//try to map here.
}
catch (ArgumentException)
{ }
Run Code Online (Sandbox Code Playgroud)
但我现在有3列要映射,部分或全部可能存在/缺失
有没有一种好方法可以检查数据表中是否存在列?
Agh*_*oub 176
你可以用operator Contains,
private void ContainColumn(string columnName, DataTable table)
{
DataColumnCollection columns = table.Columns;
if (columns.Contains(columnName))
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
MSDN - DataColumnCollection.Contains()
对于多列,您可以使用类似于下面给出的代码.我只是通过这个并找到了检查Datatable中多个列的答案.
private bool IsAllColumnExist(DataTable tableNameToCheck, List<string> columnsNames)
{
bool iscolumnExist = true;
try
{
if (null != tableNameToCheck && tableNameToCheck.Columns != null)
{
foreach (string columnName in columnsNames)
{
if (!tableNameToCheck.Columns.Contains(columnName))
{
iscolumnExist = false;
break;
}
}
}
else
{
iscolumnExist = false;
}
}
catch (Exception ex)
{
}
return iscolumnExist;
}
Run Code Online (Sandbox Code Playgroud)
使用 IndexOf 更准确:
If dt.Columns.IndexOf("ColumnName") = -1 Then
'Column not exist
End If
Run Code Online (Sandbox Code Playgroud)
如果使用 Contains,则不会区分 ColumnName 和 ColumnName2。
更新:
If ds.Tables("TableName").Columns.IndexOf("ColumnName") = -1 Then
'Column not exist
End If
Run Code Online (Sandbox Code Playgroud)