如何检查数据表中是否存在列

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()

  • @AghilasYakoub当然,我忘了那个.也许在这种情况下更好的方法.但有一点,"你可以使用运算符包含" - 它不是运算符,它是一个成员方法. (5认同)

adi*_*nas 70

myDataTable.Columns.Contains("col_name")
Run Code Online (Sandbox Code Playgroud)


lok*_*wal 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;
    }
Run Code Online (Sandbox Code Playgroud)


sup*_*h10 5

使用 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)

  • 包含不具有您所描述的行为。它不像 string.contains。更多的是“我的集合中是否包含具有此名称的列?” 而不是“我的集合是否包含一个名称包含此名称的列?” (2认同)