1

我有一个数据访问层,我绑定了一些控件。目前我有一些类似的东西

   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作为参数进行重构来做到这一点吗?

4

1 回答 1

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);
            } 
        }
于 2013-08-10T15:41:04.220 回答