2012-08-09 3 views
0

내가 ado.net 작업을위한 기본 클래스를 가지고, 그 다음과 같습니다데이터 리더에서 데이터 테이블로 데이터를 읽는 방법?

public abstract class BaseDataAccess 
    { 
     private string _connectionString = ...... 

     protected string ConnectionString 
     { 
      get { return _connectionString; } 
     } 

     protected object ExecuteScalar(string spName, SqlParameter[] parameters=null) 
     { 
      using (SqlConnection connection = new SqlConnection(_connectionString)) 
      { 
       using (SqlCommand command = new SqlCommand(spName, connection)) 
       { 
        if (parameters != null) 
        { 
         command.Parameters.AddRange(parameters); 
        } 
        command.CommandType = System.Data.CommandType.StoredProcedure; 
        connection.Open(); 
        return command.ExecuteScalar(); 
       } 
      }    
     } 

     protected DataTable ExecuteReader(string spName, SqlParameter[] parameters=null) 
     { 
      using (SqlConnection connection = new SqlConnection(_connectionString)) 
      { 
       using (SqlCommand command = new SqlCommand(spName, connection)) 
       { 
        if (parameters != null) 
        { 
         command.Parameters.AddRange(parameters); 
        } 
        command.CommandType = CommandType.StoredProcedure; 
        connection.Open(); 
        using (SqlDataReader reader = command.ExecuteReader()) 
        { 
         DataTable table = new DataTable();       
         table.Load(reader); 
         return table; 
        } 
       } 
      } 
     } 
    } 

그리고 사용자 테이블을 조회하는 클래스를

public class UsersAccess : BaseDataAccess 
    { 
     private const string SP_COUNT_USERS = "spCountUsers"; 
     private const string SP_GET_USERS = "spGetUsers"; 

     public int CountUsers() 
     { 
      return (int)base.ExecuteScalar(SP_COUNT_USERS); 
     } 

     public IList<User> GetUsers() 
     { 
      DataTable usersTable = base.ExecuteReader(SP_GET_USERS); 
      return GetUsersFromDataTable(usersTable); 
     } 

     private IList<User> GetUsersFromDataTable(DataTable usersTable) 
     { 
      IList<User> users = new List<User>(); 
      foreach (DataRow row in usersTable.Rows) 
      { 
       User user = new User(); 
       user.UserID = (int)row["UserID"]; 
       user.Password = (string)row["Password"]; 
       user.Username = (string)row["Username"]; 
      } 
      return users; 
     } 
    } 

데이터 판독기 2 데이터 행하지만 함께 제공 데이터 테이블에 데이터가 입력되지 않을 때 어떻게 수행할까요?

추 신 : ado.net의 기본 클래스를 향상시키는 데 도움이되는 정보가 있으면 좋을 것입니다. 나는 테이블이 거의없고 절차/테이블이 거의 없습니다. 나는 당신의 현재 코드가 작동하지 않는 이유에 좋은 이유를 확인할 수 없습니다 있지만

+0

당신은 DataAdapter.Fill 방법을 시도해 볼 수도의 끝에 users.Add(user);가 없습니다. (http://msdn.microsoft.com/en-us/library/497b1k4t.aspx) –

답변

2

, 각 루프

private IList<User> GetUsersFromDataTable(DataTable usersTable) 
    { 
     IList<User> users = new List<User>(); 
     foreach (DataRow row in usersTable.Rows) 
     { 
      User user = new User(); 
      user.UserID = (int)row["UserID"]; 
      user.Password = (string)row["Password"]; 
      user.Username = (string)row["Username"]; 
      users.Add(user); 
     } 
     return users; 
    } 
+2

오 마이 갓. 나는 그런 바보 야. 감사 – gigi

관련 문제