데이터 테이블에 null 값이 있는지 확인하는 가장 좋은 방법


88

데이터 테이블에 null 값이 있는지 확인하는 가장 좋은 방법은 무엇입니까?

대부분의 경우 시나리오에서 하나의 열에는 모두 null 값이 있습니다.

(이 데이터 테이블은 타사 응용 프로그램에서 반환됩니다. 응용 프로그램이 데이터 테이블을 처리하기 전에 유효성 검사를 시도하고 있습니다.)


답변:


166

열의 값을 값과 비교하여 DBNull.Value적합하다고 생각되는 방식으로 null 값을 필터링하고 관리합니다.

foreach(DataRow row in table.Rows)
{
    object value = row["ColumnName"];
    if (value == DBNull.Value)
        // do something
    else
        // do something else
}

DBNull 클래스에 대한 추가 정보


테이블에 null 값이 있는지 확인하려면 다음 방법을 사용할 수 있습니다.

public static bool HasNull(this DataTable table)
{
    foreach (DataColumn column in table.Columns)
    {
        if (table.Rows.OfType<DataRow>().Any(r => r.IsNull(column)))
            return true;
    }

    return false;
}

다음과 같이 작성할 수 있습니다.

table.HasNull();

1
이 확장 방법이 어디로 가야할지에 대한 모범 사례는 무엇입니까?
StuperUser 2011 년

6
일반적으로 일부 공용 라이브러리 또는 DAL에 "Extensions"폴더를 만듭니다. "DataTableExtensions.cs"라는 파일을 만들고 해당 메서드를 추가합니다. 다음으로 cs 파일에 "using Name.Space.Extensions"를 추가하고 정의 된 모든 확장 메서드에 액세스 할 수 있습니다.
사냥꾼

3
table.AsEnumerable()table.Rows.OfType<DataRow>()
Teejay

23
foreach(DataRow row in dataTable.Rows)
{
    if(row.IsNull("myColumn"))
        throw new Exception("Empty value!")
}

11

행과 열을 반복해서 던지고, null을 확인하고, bool이있는 null이 있는지 추적 한 다음 테이블을 반복 한 후 확인하고 처리 할 수 ​​있습니다.

//your DataTable, replace with table get code
DataTable table = new DataTable();
bool tableHasNull = false;

foreach (DataRow row in table.Rows)
{
    foreach (DataColumn col in table.Columns)
    {
        //test for null here
        if (row[col] == DBNull.Value)
        {
            tableHasNull = true;
        }
    }
}

if (tableHasNull)
{
    //handle null in table
}

예를 들어 break 문을 사용하여 foreach 루프에서 나올 수도 있습니다.

//test for null here
if (row[col] == DBNull.Value)
{
    tableHasNull = true;
    break;
}

나머지 테이블을 통해 반복을 저장합니다.



0

LinQ 다음 쿼리 사용을 사용하여 null / blank / space 등 값을 사용할 수 있습니다.

   var BlankValueRows = (from dr1 in Dt.AsEnumerable()
                                  where dr1["Columnname"].ToString() == ""
                                  || dr1["Columnname"].ToString() == ""
                                   || dr1["Columnname"].ToString() == ""
                                  select Columnname);

여기에서 Columnname 을 테이블 열 이름으로 바꾸고 위의 코드에서 검색 항목을 ""로 바꾸면 null 값을 찾습니다.


0
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
    if (dr["Column_Name"] == DBNull.Value)
    {
        //Do something
    }
    else
    {
        //Do something
    }
}

5
이 코드가 질문에 답할 수 있지만 문제를 해결하는 방법을 설명하고 코드를 예제 또는 참조로 제공하는 것이 좋습니다. 코드 전용 답변은 혼란스럽고 컨텍스트가 부족할 수 있습니다.
로버트 컬럼비아
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.