2012-06-29 2 views
0

필드가 데이터베이스의 테이블에 실제로 존재하는지 확인하고 싶습니다. SqlDataReader 클래스를 사용하여 데이터를 읽었습니다. 값을 SqlDataReader에 할당 한 후 foreach를 사용하여 각 레코드를 반복하는 루프를 만들었습니다. 다음은 샘플 코드입니다.DbDataRecord에서 열의 존재 여부를 확인하는 데 사용되는 방법은 무엇입니까?

SqlCommand sqlCommand = new SqlCommand(); 

SqlDataReader sqlDr = sqlCommand.ExecuteReader(); 

Foreach(DbDataRecord record in sqlDr) 
{ 
    // Validate if the value is not null and (I want to validate if this field really exist in the table) 
    if(record["MyField1"].GetType().ToString() == "System.DBNull") 
    { 
     // Statement here 
    } 
} 

나는 친절한 답변을 바랍니다. 고맙습니다.

답변

2

내가하는 반복 독자의 각 분야를 통해 extension 방법을 작성하고 참/거짓 반환합니다.

public static class DataRecordExtensions 
{ 
    public static bool HasColumn(this IDataRecord dr, string columnName) 
    { 
     for (int i = 0; i < dr.FieldCount; i++) 
     { 
      if (dr.GetName(i).Equals(columnName, StringComparison.InvariantCultureIgnoreCase)) 
       return true; 
     } 
     return false; 
    } 
} 

는 그럼 난 프레임 워크 1.1이기 때문에 확장처럼 사용할 수 없습니다 내 경우에는 :(... 많은, 난이 찾고 있던이

if (objReader.HasColumn("FirstName") 
{ 
    //Column exist. So lets read the value 
    someobject.Name= objReader.GetString(objReader.GetOrdinal("FirstName")); 
} 
+0

처럼 감사를 호출 .. ¬¬ –

0

질문과 유사한 코드를 유지하면 이이 방법을 수행

using (SqlCommand sqlCommand = new SqlCommand()) 
{ 
    SqlDataReader sqlDr = sqlCommand.ExecuteReader(); 

    if (!sqlDr.Read()) return; 

    HashSet<string> fieldNames = new HashSet<string>(sqlDr.FieldCount); 
    for (int i = 0; i < sqlDr.FieldCount; i++) 
    { 
     fieldNames.Add(sqlDr.GetName(i)); 
    } 

    if (!fieldNames.Contains("MyField1") || !fieldNames.Contains("MyField2")) 
    { 
     // do something here 
    } 
} 
관련 문제