더북(TheBook)

7. DevUser 프로젝트 루트에 Repositories라는 이름으로 폴더를 생성한다. Repositories 폴더에 UserRepository.cs 클래스를 만들고 모든 내용을 지운 후 다음과 같이 작성한다. 회원 관리와 관련해서는 더 많은 메서드가 필요하겠지만, 간단히 회원 가입, 회원 정보 상세보기, 회원 가입 확인과 회원 정보 수정에서 사용하는 메서드를 구성한다. ORM을 사용해도 되고 다음과 같이 순수 ADO.NET 코드로 구현해도 된다.

▼  /Repositories/UserRepository.cs

using DevUser.Models;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;

namespace DevUser.Repositories
{
  public class UserRepository
  {
      // 공통으로 사용될 커넥션 개체
      private SqlConnection con;
      
      public UserRepository()
      {
          con = new SqlConnection();
          con.ConnectionString = WebConfigurationManager.ConnectionStrings[
              “ConnectionString”].ConnectionString;
      }
      
      public void AddUser(string userId, string password)
      {
          SqlCommand cmd = new SqlCommand();
          cmd.Connection = con;
          cmd.CommandText = “WriteUsers”;
          cmd.CommandType = CommandType.StoredProcedure;
          
          cmd.Parameters.AddWithValue(”@UserID”, userId);
          cmd.Parameters.AddWithValue(”@Password”, password);
          
          con.Open();
          cmd.ExecuteNonQuery();
          con.Close();
      }
      
      public UserViewModel GetUserByUserId(string userId)
      {
          UserViewModel r = new UserViewModel();
          
          SqlCommand cmd = new SqlCommand();
          cmd.Connection = con;
          cmd.CommandText = “Select * From Users Where UserID = @UserID”;
          cmd.CommandType = CommandType.Text;
          
          cmd.Parameters.AddWithValue(”@UserID”, userId);
          
          con.Open();
          IDataReader dr = cmd.ExecuteReader();
          if (dr.Read())
          {
              r.Id = dr.GetInt32(0);
              r.UserId = dr.GetString(1);
              r.Password = dr.GetString(2);
          }
          con.Close();
          
          return r;
      }
      
      public void ModifyUser(int uid, string userId, string password)
      {
          SqlCommand cmd = new SqlCommand();
          cmd.Connection = con;
          cmd.CommandText = “ModifyUsers”;
          cmd.CommandType = CommandType.StoredProcedure;
          
          cmd.Parameters.AddWithValue(”@UserID”, userId);
          cmd.Parameters.AddWithValue(”@Password”, password);
          cmd.Parameters.AddWithValue(”@UID”, uid);
          
          con.Open();
          cmd.ExecuteNonQuery();
          con.Close();
      }
      
      public bool IsCorrectUser(string userId, string password)
      {
          bool result = false;
          
          con.Open();
          SqlCommand cmd = new SqlCommand();
          cmd.Connection = con;
          cmd.CommandText = “Select * From Users “
              + ” Where UserID = @UserID And Password = @Password”;
          cmd.CommandType = CommandType.Text;
          cmd.Parameters.AddWithValue(”@UserID”, userId);
          cmd.Parameters.AddWithValue(”@Password”, password);
                      SqlDataReader dr = cmd.ExecuteReader();
          if (dr.Read())
          {
              result = true; // 아이디와 암호가 맞는 데이터가 있구나…
          }
          dr.Close();
          con.Close();
          return result;
      }
  }
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.