数据访问层的重构技术

时间:2013-08-10 15:17:08

标签: c# asp.net ado.net

我有一个数据访问层,我绑定了一些控件。

目前我有一些东西
   public List<Race> GetRaces()
        {
            List<Race> raceList = new List<Race>();
            using (var con = new SqlConnection(this.ConnectionString))
            {
                using (var cmd = new SqlCommand("spGetRace",con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Race r = new Race();
                        r.RaceId = Convert.ToInt32(rdr["raceId"]);
                        r.RaceDescription = rdr["RaceDescription"].ToString();
                        raceList.Add(r);
                    }
                }
                return raceList;
            }
        }
        public List<Ses> GetSes()
        {
            List<Ses> sesList = new List<Ses>();
            using (var con = new SqlConnection(this.ConnectionString))
            {
                using (var cmd = new SqlCommand("spGetSes",con))
                {
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        Ses s = new Ses();
                        s.SesId = Convert.ToInt32(rdr["SesId"]);
                        s.SesDescription = rdr["SesDescription"].ToString();
                        sesList.Add(s);
                    }
                }
                return sesList;
            }
        }

将绑定到我的表示层中的下拉列表。这种基本类型的数据访问有哪些有用的重构技术,而不是必须反复输入这个ADO.NET代码的大部分内容?我可以通过使用SqlConnection,SqlCommand和我的一个自定义类型Race/Ses作为参数进行重构来实现此目的吗?

1 个答案:

答案 0 :(得分:1)

  public enum SqlCommandNames
    {
        spGetRace,
        spGetSes ,
        spGetOthers
    }

public class myobj{
  public int id {get;set;}
  public string description {get;set}
}
public List<myobj> GetObj(SqlCommandNames sqlcmd)
        {
            List<myobj> objList = new List<myobj>();
            using (var con = new SqlConnection(this.ConnectionString))
            {
                using (var cmd = new SqlCommand(sqlcmd.ToString(),con))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        myobj r = new myobj();
                        r.id =  = reader.GetInt32(0); 
                        r.description = reader.IsDBNull(1) ? "" : reader.GetString(1);
                        objList.Add(r);
                    }
                }
                return objList;
            }
        }

其他建议是缓存列表

  List<myobj> objList = (List<myobj>)HttpContext.Current.Cache[sqlcmd.ToString()];
   if (objList == null)
     {
       List<myobj> objList = new List<myobj>();
       HttpContext.Current.Cache.Insert(sqlcmd.ToString(), objList);

       ....
       ....
    }


 //and  caching all  on start up


 protected void Application_Start()
        { 
            foreach (SqlCommandNames x in Enum.GetValues(typeof(SqlCommandNames)))
            {
                GetObj(x);
            } 
        }