109

我有一个用 csv 文件的内容生成的数据表。我使用其他信息将 csv 的某些列(现在在数据表中)映射到用户需要填写的信息。

在最好的世界里,映射总是可能的。但这不是现实......所以在我尝试映射数据表列值之前,我需要检查该列是否存在。如果我不做这个检查我有一个 ArgumentException。

当然我可以用这样的一些代码来检查这个:

try
{
    //try to map here.
}
catch (ArgumentException)
{ }

但我现在有 3 列要映射,部分或全部可能存在/缺失

有没有一种检查数据表中是否存在列的好方法?

4

7 回答 7

225

你可以使用operator Contains

private void ContainColumn(string columnName, DataTable table)
{
    DataColumnCollection columns = table.Columns;        
    if (columns.Contains(columnName))
    {
       ....
    }
}

MSDN - DataColumnCollection.Contains()

于 2013-07-17T17:36:19.620 回答
87
myDataTable.Columns.Contains("col_name")
于 2014-02-05T14:14:48.080 回答
8

对于多列,您可以使用类似于下面给出的代码。我刚刚经历了这个并找到了检查数据表中多列的答案。

 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;
    }
于 2015-03-12T05:04:49.610 回答
2

使用 IndexOf 更准确:

If dt.Columns.IndexOf("ColumnName") = -1 Then
    'Column not exist
End If

如果使用 Contains,则不会区分 ColumName 和 ColumnName2。

于 2020-12-01T11:06:52.910 回答
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")

于 2021-01-21T09:03:27.803 回答
1
DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
于 2019-07-24T12:19:05.487 回答
0

您可以查看Columns给定的属性DataTable,它是表中所有列的列表。

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}

http://msdn.microsoft.com/en-us/library/system.data.datatable.columns.aspx

于 2013-07-17T17:37:03.850 回答