2012-05-30 4 views
0
내가 후속 질문과 함께 있어요

으로 : 당신이 울부 짖는 소리를 참조로 나는, 나는이 SqlDataReader 개체에 잠시 SqlDataReader 개체를 반환하는 방법을 한 내 모든 UserEntite를 모든 데이터, 이름, 전자 메일, ID로 채 웁니다. 하지만 (GetUserById, GetUserByEmai, GetAllUsers) 같이 사용자 클래스에서 많은 메서드가 있으며 데이터를 다시 채워야합니다.패스 SqlDataReader 개체는 매개 변수

내 UserEntitie를 채우는 개인 메서드를 만들어야하고 각 메서드에서 FillUser 메서드 만 호출하고 해당 메서드를 반환해야합니다. SqlDataReader를 개인 메서드 FillUser에 전달해야한다고 생각합니다.

제안 사항이 있으시면 알려주세요.

+1

어디에서 문제가 발생합니까? 이미해야할 일을 결정했습니다. – Reniuz

답변

1

당신이 뭔가를 할 수 있습니다 :

class UserEntitie 
{ 
    internal void FillFromSqlDataReader(SqlDataReader reader) 
    { 
     this.Name = Convert.ToString(reader["name"]); 
     /* Fill your fields */ 
    } 
} 

사용법 :

using (SqlDataReader objSqlDtReader = objDtAccess.GetDataReader()) 
{ 
    while(objSqlDtReader.Read()) 
    { 
     UserEntitie objUserEntitie = new UserEntitie(); 
     objUserEntitie.FillFromSqlDataReader(objSqlDtReader); 
     /* Add to a list or something */  
    } 
} 
1

I 시스템의 비슷한 종류를 사용하여, 대신의 개인 객체로 SqlDataReader 개체를 통과, 내가 대신 해요 개체에 SqlConnection을 전달하고 필요한 작업을 수행하는 개인용 FillDetailsFromDb() 메서드가 있어야합니다.

그래서 SqlDataReader를 전달하는 대신 매개 변수없는 생성자와 SqlConnection을 매개 변수로 사용하는 생성자를 사용합니다.

개체를 만들면 매개 변수 (내 경우에는 Guid)를 개체에 전달하고 개인 메서드는 보낸 SqlCommand와 함께 생성 된 SqlConnection을 사용합니다. 공개 방법에.

private void FillDetailsFromDb(Guid p) 
    { 
     SqlCommand com = new SqlCommand(); 
     com.Connection = conn; 

     com.CommandText = "spSelectProspectUsingLinkParameter"; 
     com.CommandType = CommandType.StoredProcedure; 
     com.Parameters.AddWithValue("@linkparam", p); 
     conn.Open(); 
     SqlDataReader rdr = com.ExecuteReader(); 
     ... 
     etc 
    } 

이 개체가 여전히 분리 된 개체로 존재할 수 있으며 다른 장소에서 사용할 수있는 수단과 SqlDataReader 개체는 내가 아주 많이 좋아하지 않는 것으로 나타났습니다되는 건네 줄 수가 없습니다.

덧붙여 말하자면,이 문제를 직접 조사하는 동안 데이터베이스의 데이터 유형에서 .Net 데이터 유형으로 데이터를 변환 할 때 이상한 null 값을 발생시킬 가능성이 있음을 발견했습니다. 다음 코드와 같은 것을 사용하여 데이터베이스의 열 이름을 활용할뿐만 아니라 DBNull 데이터 형식을 피할 수있었습니다.

if (!rdr.IsDBNull(rdr.GetOrdinal("firstname"))) 
{ 
    Firstname = rdr.GetString(rdr.GetOrdinal("firstname")); 
}