web-dev-qa-db-ja.com

データテーブルに列が存在するかどうかを確認する方法

Csvファイルのコンテンツで生成されたデータファイルがあります。他の情報を使用して、csvの一部の列(現在はデータテーブルにあります)を、ユーザーが入力する必要がある情報にマップします。

最高の世界では、マッピングは常に可能です。しかし、これは現実的ではありません...したがって、データテーブルの列の値をマップする前に、その列が存在するかどうかを確認する必要があります。このチェックを行わないと、ArgumentExceptionが発生します。

もちろん、次のようなコードでこれを確認できます。

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

しかし、私は今のところ3つの列をマップする必要があり、一部またはすべてが既存/欠落している可能性があります

データテーブルに列が存在するかどうかを確認する良い方法はありますか?

80
Rémi

operator Containsを使用できますが、

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

MSDN-DataColumnCollection.Contains()

169
Aghilas Yakoub
myDataTable.Columns.Contains("col_name")
67
adinas

複数の列の場合、以下に示すコードに似たコードを使用できます。私はこれを調べていたところ、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;
    }
8

特定のColumnsDataTableプロパティを見ることができます。これは、テーブル内のすべての列のリストです。

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

0
asawyer