簡體   English   中英

如何檢查數據表中是否存在列

[英]How to check if a column exists in a datatable

我有一個用 csv 文件的內容生成的數據。 我使用其他信息將 csv 的某些列(現在在數據表中)映射到用戶需要填寫的信息。

在最好的世界中,映射總是可能的。 但這不是現實......所以在我嘗試映射數據表列值之前,我需要檢查該列是否存在。 如果我不做這個檢查,我就會有一個 ArgumentException。

當然,我可以用一些這樣的代碼來檢查這個:

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

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

有沒有一種好方法可以檢查數據表中是否存在列?

您可以使用operator Contains

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

MSDN - DataColumnCollection.Contains()

myDataTable.Columns.Contains("col_name")

對於多列,您可以使用類似於下面給出的代碼。我剛剛通過這個並找到了檢查數據表中多列的答案。

 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;
    }

基於接受的答案,我做了一個擴展方法來檢查表中存在的列

我為誰分憂。

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

您可以查看給定DataTableColumns屬性,它是表中所有列的列表。

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

DataColumnCollection col = datatable.Columns;        
if (!columns.Contains("ColumnName1"))
{
   //Column1 Not Exists
}

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}

使用 IndexOf 更准確:

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

如果使用包含,則不會區分 ColumName 和 ColumnName2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM