데이터 테이블에 열이 있는지 확인하는 방법


92

csv 파일의 내용으로 생성 된 데이터 블이 있습니다. 다른 정보를 사용하여 csv의 일부 열 (현재 데이터 테이블에 있음)을 사용자가 입력해야하는 정보에 매핑합니다.

최고의 세계에서 매핑은 항상 가능할 것입니다. 하지만 이것은 현실이 아닙니다. 따라서 데이터 테이블 열 값을 매핑하기 전에 해당 열이 존재하는지 확인해야합니다. 이 검사를 수행하지 않으면 ArgumentException이 있습니다.

물론 다음과 같은 코드로 이것을 확인할 수 있습니다.

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

하지만 지금은 매핑 할 열이 3 개 있고 일부 또는 전체가 존재하거나 누락되었을 수 있습니다.

데이터 테이블에 열이 있는지 확인하는 좋은 방법이 있습니까?


DataSet/ 를 다루고 DataTable있습니까? 그렇다면 테이블의 모든 열 목록에 대한 테이블의 열 컬렉션을 볼 수 있습니다.
asawyer jul.

예, @asawyer csv의 내용은 데이터 테이블에 덤프됩니다. 이 방향을 살펴 보겠습니다.
Rémi

답변:


196

당신은 사용할 수 있습니다 operator Contains,

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

MSDN-DataColumnCollection.Contains ()


이것이 linq라고 확신합니까? 난 내 코드에서 LINQ에 대한 참조와이 작품이 없습니다
레미

그것은 열 운영자 간단합니다
Aghilas Yakoub

이것은 linq 확장 메서드가 아니라 DataColumnCollection 유형의 멤버이지만 잘 작동합니다.
asawyer jul.

5
@AghilasYakoub 물론, 나는 그것을 잊었다. 이 경우에도 더 좋은 방법 일 것입니다. 하지만 한 가지는 "Contains 연산자를 사용할 수 있습니다."-연산자가 아니라 멤버 메서드입니다.
asawyer jul.


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


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

if (columns.Contains("ColumnName2"))
{
   //Column2 Exists
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.