跟model层一样,我们同样可以用动软代码生成器来生成DAL层。

这一层主要是数据库的访问,不再多介绍.

需要说明的是我们要把微软的SqlHelper类引入我们的项目,这样我们访问数据库用这个类就够了,关于这个类大伙可以参见微软petshop中的SqlHelper类。

 

1.  首先定义接口

我们创建三个接口:

       

1)  IInfo

InfoResult Add(Info info);
InfoResult Update(Info info);
InfoResult Delete(int infoId);
InfoList GetInfoList(SearchInfo searchInfo);
InfoList GetInfoById(int infoId);

2)  IInfoType
跟上面相同,不再赘述。

3)  IUserInfo
跟上面相同,不再赘述。

 

2.实现这些接口,总结完毕后,我会把代码上传上来,现在暂时把有一部分代码放到这里

     于InfoDal为例:

      

using System;

using System.Collections.Generic;

using System.Data;

using System.Data.SqlClient;

using System.Linq;

using System.Text;

using InfoPub.Modal;

 

namespace InfoPub.DAL

{

    public class InfoDal:IInfo

    {

        public InfoResult Add(Info model)

        {

            InfoResult infoResult = new InfoResult();

            StringBuilder strSql = new StringBuilder();

            try

            {

                strSql.Append("insert into Info(");

                strSql.Append("InfoId,infoname,InfoContent,TypeId,PictureUrl,CreateId,CreateDate,ModifyDate,AttachMentUrl,IsTop)");

                strSql.Append(" values (");

                strSql.Append("@InfoId,@infoname,@InfoContent,@TypeId,@PictureUrl,@CreateId,@CreateDate,@ModifyDate,@AttachMentUrl,@IsTop)");

                SqlParameter[] parameters = {

                                               new SqlParameter("@InfoId", SqlDbType.Int,4),

                                               new SqlParameter("@infoname", SqlDbType.NVarChar,200),

                                               new SqlParameter("@InfoContent", SqlDbType.Text),

                                               new SqlParameter("@TypeId", SqlDbType.Int,4),

                                               new SqlParameter("@PictureUrl", SqlDbType.NVarChar,4000),

                                               new SqlParameter("@CreateId", SqlDbType.Int,4),

                                               new SqlParameter("@CreateDate", SqlDbType.DateTime),

                                               new SqlParameter("@ModifyDate", SqlDbType.DateTime),

                                               new SqlParameter("@AttachMentUrl", SqlDbType.NVarChar,4000),

                                               new SqlParameter("@IsTop", SqlDbType.TinyInt,1)};

 

                parameters[0].Value = model.InfoId;

                parameters[1].Value = model.Infoname;

                parameters[2].Value = model.InfoContent;

                parameters[3].Value = model.TypeId;

                parameters[4].Value = model.PictureUrl;

                parameters[5].Value = model.CreateId;

                parameters[6].Value = model.CreateDate;

                parameters[7].Value = model.ModifyDate;

                parameters[8].Value = model.AttachMentUrl;

                parameters[9].Value = model.IsTop;

 

                SqlHelper.ExecuteNonQuery(CommandType.Text, strSql.ToString(), parameters);

                infoResult.Code = 0;

            }

            catch (Exception ex)

            {

                infoResult.Code = 100;

                infoResult.Message = ex.Message + ex.StackTrace + ex.InnerException;

            }

           

 

            return infoResult;

        }

        public InfoResult Update(Info model)

        {

            InfoResult infoResult = new InfoResult();

            StringBuilder strSql = new StringBuilder();

            try

            {

                strSql.Append("update Info set ");

                strSql.Append("infoname=@infoname,");

                strSql.Append("InfoContent=@InfoContent,");

                strSql.Append("TypeId=@TypeId,");

                strSql.Append("PictureUrl=@PictureUrl,");

                strSql.Append("CreateId=@CreateId,");

                strSql.Append("CreateDate=@CreateDate,");

                strSql.Append("ModifyDate=@ModifyDate,");

                strSql.Append("AttachMentUrl=@AttachMentUrl,");

                strSql.Append("IsTop=@IsTop");

                strSql.Append(" where InfoId=@InfoId ");

                SqlParameter[] parameters = {

                                               new SqlParameter("@infoname", SqlDbType.NVarChar,200),

                                               new SqlParameter("@InfoContent", SqlDbType.Text),

                                               new SqlParameter("@TypeId", SqlDbType.Int,4),

                                               new SqlParameter("@PictureUrl", SqlDbType.NVarChar,4000),

                                               new SqlParameter("@CreateId", SqlDbType.Int,4),

                                               new SqlParameter("@CreateDate", SqlDbType.DateTime),

                                               new SqlParameter("@ModifyDate", SqlDbType.DateTime),

                                               new SqlParameter("@AttachMentUrl", SqlDbType.NVarChar,4000),

                                               new SqlParameter("@IsTop", SqlDbType.TinyInt,1),

                                               new SqlParameter("@InfoId", SqlDbType.Int,4)};

                parameters[0].Value = model.Infoname;

                parameters[1].Value = model.InfoContent;

                parameters[2].Value = model.TypeId;

                parameters[3].Value = model.PictureUrl;

                parameters[4].Value = model.CreateId;

                parameters[5].Value = model.CreateDate;

                parameters[6].Value = model.ModifyDate;

                parameters[7].Value = model.AttachMentUrl;

                parameters[8].Value = model.IsTop;

                parameters[9].Value = model.InfoId;

                SqlHelper.ExecuteNonQuery(CommandType.Text, strSql.ToString(), parameters);

                infoResult.Code = 0;

 

            }

            catch (Exception ex)

            {

                infoResult.Code = 100;

                infoResult.Message = ex.Message + ex.StackTrace + ex.InnerException;

            }

 

            return infoResult;

           

        }

        public InfoResult Delete(int infoId)

        {

            InfoResult infoResult = new InfoResult();

            StringBuilder strSql = new StringBuilder();

            try

            {

                strSql.Append("delete from Info ");

                strSql.Append(" where InfoId=@InfoId ");

                SqlParameter[] parameters = {

                                               new SqlParameter("@InfoId", SqlDbType.Int,4)};

                parameters[0].Value = infoId;

                SqlHelper.ExecuteNonQuery(CommandType.Text, strSql.ToString(), parameters);

                infoResult.Code = 0;

            }

            catch (Exception ex)

            {

                infoResult.Code = 100;

                infoResult.Message = ex.Message + ex.StackTrace + ex.InnerException;

               

            }

            return infoResult;

        }

        // SearchInfo是自定义的查询类

        public InfoList GetInfoList(SearchInfo searchInfo)

        {

            InfoList infoList=new InfoList();

            StringBuilder strSql = new StringBuilder();

            StringBuilder strwhere=new StringBuilder();

            if (!string.IsNullOrEmpty(searchInfo.Infoname))

            {

                strwhere.Append((string.IsNullOrEmpty(strwhere.ToString()) ? "where " : " and ") + @"infoname like '%'+@infoname+'%' ");

            }

            if (searchInfo.BeginDate != Convert.ToDateTime("0001/1/1") || searchInfo.EndDate != Convert.ToDateTime("0001/1/1"))

            {

                strwhere.Append((string.IsNullOrEmpty(strwhere.ToString()) ? "where " : " and ") + @"CreateDate between @startdate and @enddate ");

            }

            try

            {

                strSql.Append(@" SELECT count(1) as maxcount from Info " + strwhere.ToString() + "; ");

                strSql.Append(@" WITH Row AS

                                      (SELECT ROW_NUMBER() OVER(ORDER BY InfoId) AS rownumber, InfoId FROM Info (NOLOCK) "

                                            + strwhere.ToString() + ") ");

                strSql.Append("select InfoId,infoname,InfoContent,TypeId,PictureUrl,CreateId,CreateDate,ModifyDate,AttachMentUrl,IsTop from Info inner join Row on Info.InfoId=Row.InfoId WHERE rownumber BETWEEN @StartNum AND @StartNum + @pageSize - 1 ");

 

                SqlParameter[] parameters = {

                                               new SqlParameter("@infoname", SqlDbType.NVarChar,200),

                                               new SqlParameter("@startdate", SqlDbType.DateTime),

                    new SqlParameter("@enddate", SqlDbType.DateTime),

                    new SqlParameter("@StartNum",SqlDbType.Int),

                    new SqlParameter("@pageSize",SqlDbType.Int)};

                parameters[0].Value = searchInfo.Infoname;

                parameters[1].Value = searchInfo.BeginDate;

                parameters[2].Value = searchInfo.EndDate;

                parameters[3].Value = searchInfo.pageInfo.startNum;

                parameters[4].Value = searchInfo.pageInfo.pageSize;

 

                using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.Text, strSql.ToString(), parameters))

                {

                    if (dataReader.Read())

                    {

 

                        PageInfo pageInfo=new PageInfo();

                        pageInfo.Max = dataReader.GetInt32(0);

                        if (dataReader.NextResult())

                        {

                            while (dataReader.Read())

                            {

                                Info info=new Info();

                                info = PopulateInfoEntityFromDr(dataReader);

                                infoList.infoList.Add(info);

                            }

                        }

                        infoList.infoResult.Code = 0;

                    }

                    else

                    {

                        infoList.infoResult.Code = 101;

                        infoList.infoResult.Message = "没?找¨°到Ì?相¨¤关?联¢a的Ì?信?息¡é!ê?";

                    }

                }

            }

            catch (Exception ex)

            {

                infoList.infoResult.Code = 100;

                infoList.infoResult.Message = ex.Message + ex.StackTrace + ex.InnerException;

              

            }

 

            return infoList;

        }

        public InfoList GetInfoById(int infoId)

        {

            InfoList infoList = new InfoList();

            StringBuilder strSql = new StringBuilder();

            try

            {

                strSql.Append("select InfoId,infoname,InfoContent,TypeId,PictureUrl,CreateId,CreateDate,ModifyDate,AttachMentUrl,IsTop from Info ");

                strSql.Append(" where InfoId=@InfoId ");

                SqlParameter[] parameters = {

                                               new SqlParameter("@InfoId", SqlDbType.Int,4)};

                parameters[0].Value = infoId;

                using (IDataReader dataReader = SqlHelper.ExecuteReader(CommandType.Text, strSql.ToString(), parameters))

                {

                    if (dataReader.Read())

                    {

                        Info info=new Info();

                        info = PopulateInfoEntityFromDr(dataReader);

                        infoList.infoList.Add(info);

                        infoList.infoResult.Code = 0;

                    }

                    else

                    {

                        infoList.infoResult.Code = 101;

                        infoList.infoResult.Message = "没?找¨°到Ì?相¨¤关?联¢a的Ì?信?息¡é!ê?";

                    }

                }

            }

            catch (Exception ex)

            {

                infoList.infoResult.Code = 100;

                infoList.infoResult.Message = ex.Message + ex.StackTrace + ex.InnerException;

 

            }

 

            return infoList;

 

        }

 

        /// <summary>

        /// 得Ì?到Ì?  info 数ºy据Y实º¦Ì体¬?

        /// </summary>

        /// <param name="dr">dr</param>

        /// <returns>info 数ºy据Y实º¦Ì体¬?</returns>

        public Info PopulateInfoEntityFromDr(IDataReader dr)

        {

            Info Obj = new Info();

 

            Obj.InfoId = ((dr["InfoId"]) == DBNull.Value) ? 0 : Convert.ToInt32(dr["InfoId"]);

            Obj.Infoname = dr["infoname"].ToString();

            Obj.InfoContent = dr["InfoContent"].ToString();

            Obj.TypeId = ((dr["TypeId"]) == DBNull.Value) ? 0 : Convert.ToInt32(dr["TypeId"]);

            Obj.PictureUrl = dr["PictureUrl"].ToString();

            Obj.CreateId = ((dr["CreateId"]) == DBNull.Value) ? 0 : Convert.ToInt32(dr["CreateId"]);

            Obj.CreateDate = ((dr["CreateDate"]) == DBNull.Value) ? Convert.ToDateTime(1900 - 1 - 1) : Convert.ToDateTime(dr["CreateDate"]);

            Obj.ModifyDate = ((dr["ModifyDate"]) == DBNull.Value) ? Convert.ToDateTime(1900 - 1 - 1) : Convert.ToDateTime(dr["ModifyDate"]);

            Obj.AttachMentUrl = dr["AttachMentUrl"].ToString();

            Obj.IsTop = ((dr["IsTop"]) == DBNull.Value) ? Convert.ToByte(0) : Convert.ToByte(dr["IsTop"]);

 

            return Obj;

        }

 

    }

}