我有一个使用csv文件内容生成的数据。我使用其他信息将csv的某些列(现在在数据表中)映射到用户需要填充的信息。
在最好的世界中,映射总是可能的。但这不是现实......所以在我尝试映射数据表列值之前,我需要检查该列是否存在。如果我不这样做,请检查我是否有ArgumentException。
当然我可以用这样的代码来检查:
try
{
//try to map here.
}
catch (ArgumentException)
{ }
但我现在有3列要映射,部分或全部可能存在/缺失
有没有一种好方法可以检查数据表中是否存在列?
答案 0 :(得分:166)
您可以使用operator Contains
,
private void ContainColumn(string columnName, DataTable table)
{
DataColumnCollection columns = table.Columns;
if (columns.Contains(columnName))
{
....
}
}
答案 1 :(得分:64)
myDataTable.Columns.Contains("col_name")
答案 2 :(得分:8)
对于多列,您可以使用类似于下面给出的代码。我只是通过这个并找到了检查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;
}
答案 3 :(得分:2)
基于接受的答案,我做了一个扩展方法来检查表中存在的列
我为谁担心。
public static class DatatableHelper
{
public static bool ContainColumn(this DataTable table, string columnName)
{
DataColumnCollection columns = table.Columns;
if (columns.Contains(columnName))
{
return true;
}
return false;
}
}
并用作 dtTagData.ContainColumn("SystemName")
答案 4 :(得分:0)
您可以查看给定Columns
的{{1}}属性,它是表格中所有列的列表。
DataTable
http://msdn.microsoft.com/en-us/library/system.data.datatable.columns.aspx
答案 5 :(得分:0)
使用IndexOf更准确:
load_file
如果使用了包含,则不会区分ColumName和ColumnName2。
答案 6 :(得分:-1)
DataColumnCollection col = datatable.Columns;
if (!columns.Contains("ColumnName1"))
{
//Column1 Not Exists
}
if (columns.Contains("ColumnName2"))
{
//Column2 Exists
}