VS2005基于Microsoft Enterprise Library January 2006 的网站架构(一)

来源:互联网 发布:人物关系图制作软件 编辑:程序博客网 时间:2024/06/05 14:10

 

1、安装Enterprise Library January 2006.exe 

2、建立好项目的Web站点。(UI层)    如:QrcodeTecWebSite

3、利用EntLibConfig.exe 工具配置Webconfig 文件。
     a、配置WebConfig中的数据库连接字符串
            打开安装企业库路径: 
                如: D:Program FilesMicrosoft Enterprise Library January 
2006inEntLibConfig.exe
           右键: Connection Strings
->New->Connection String。(name 更改为:SQLConnection)
           输入参数:
           如:Database的Value: WebGuid
                         Server的Value: (Local)
                 新建数据库用户名和密码方法(默认没有提供):
                 右键: Connection String
->New->Connection String Parameter
                   如: Parameter的Name: uid     Parameter的Value:  sa
                            Parameter的Name: pwd     Parameter的Value:  sa
                 添加默认数据库连接方法:
                Data Access Application  Block 选择 DefaultDataBase 值:SQLConnection

 
4、  建数据库表。(PD 建数据库模型,工具:Sybase.PowerDesiner.v12.0.zip) 
 
    
/*==============================================================*/
 
/* DBMS name:      Microsoft SQL Server 2005                    */
 
/* Created on:     2008-1-3 18:54:08                            */
 
/*==============================================================*/


 
if exists (select 1
             from  sysobjects
            
where  id = object_id('dbo.HouseInfo')
             and   type 
= 'U')
    drop table dbo.HouseInfo
 go


 
/*==============================================================*/
 
/* Table: HouseInfo                                             */
 
/*==============================================================*/
 create table dbo.HouseInfo (
    ID                   
int                  identity,
    Name                 varchar(
500)         null,
    Orders               
int                  null,
    InputTime            datetime             
null default getdate(),
    constraint PK_HOUSEINFO primary key (ID)
 )
 go

 execute sp_addextendedproperty 
'MS_Description'
    
'标识ID',
    
'user''dbo''table''HouseInfo''column''ID'
 go

 execute sp_addextendedproperty 
'MS_Description'
    
'小区名称',
    
'user''dbo''table''HouseInfo''column''Name'
 go

 execute sp_addextendedproperty 
'MS_Description'
    
'顺序号',
    
'user''dbo''table''HouseInfo''column''Orders'
 go

 execute sp_addextendedproperty 
'MS_Description'
    
'入库时间',
    
'user''dbo''table''HouseInfo''column''InputTime'
 go

5、生成查询的存储过程(自己的存储过程代码生成器,(注:该存储过程可以优化)
   代码生成器参考:http:
//blog.csdn.net/zlp321002/archive/2007/08/14/1742064.aspx)
   生成代码如下:

IF EXISTS (SELECT 
1 FROM SYSOBJECTS WHERE ID=OBJECT_ID('SP_HouseInfo_Query') AND XTYPE IN (N'P'))
     DROP PROC SP_HouseInfo_Query
GO 
/*+--------------------------------------+
| 过程名称:SP_HouseInfo_Query
| 功能说明:根据条件获取表HouseInfo的记录的分页存储过程
| 入口参数:@SearchCondition:搜索条件, @OrderList:分页排序方式
|   @PageSize:页大小,   @PageIndex:当前页
| 过程返回:返回记录数
| 维护记录:Y/A
| 使用案例:SP_HouseInfo_Query '',' orders',10248,1
| 工作站名:ZLP
| 联系方式:Spark.Zou@hotmail.com
| 创建日期:2008-01-03 21:47:03
+--------------------------------------+
*/

CREATE PROC SP_HouseInfo_Query
    @SearchCondition    VARCHAR(
2000), --查询条件
    @OrderList          VARCHAR(
1000), --排序列表
    @PageSize           INT
=10,     --每页的大小
    @PageIndex          INT      
--要显示的页码
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @SQL VARCHAR(
200)
    DECLARE @KEYCOLUMNS VARCHAR(
200)
    SELECT @SQL
='',@KEYCOLUMNS='' 
    IF ISNULL(@SearchCondition,
'')=''  AND ISNULL(@OrderList,'')<>''
    BEGIN
    SET @SQL
='SELECT ID,Name,Orders,InputTime FROM (    
        SELECT ROW_NUMBER()OVER(ORDER BY '+@OrderList+' ) AS ROWID,* FROM HouseInfo 
       ) AS MYTABLE 
     WHERE ROWID BETWEEN 
'+LTRIM(@PageSize)+'*('+LTRIM(@PageIndex)+'-1)+1 and '+LTRIM(@PageSize)+'*'+LTRIM(@PageIndex)+' ' 
    END
    IF ISNULL(@SearchCondition,
'')=''  AND ISNULL(@OrderList,'')=''
    BEGIN
         SELECT @KEYCOLUMNS
=@KEYCOLUMNS+','+A.NAME
         FROM SYSCOLUMNS A INNER JOIN  SYSTYPES B
         ON A.XUSERTYPE
=B.XUSERTYPE AND ID=OBJECT_ID('HouseInfo')
         AND  EXISTS(SELECT 
1 FROM SYSOBJECTS 
            WHERE XTYPE
='PK' AND PARENT_OBJ=A.ID AND NAME IN (
             SELECT NAME FROM SYSINDEXES 
             WHERE INDID IN(
             SELECT INDID FROM SYSINDEXKEYS 
             WHERE ID 
= A.ID AND COLID=A.COLID
                )
                         )
         )
         SET @KEYCOLUMNS
=STUFF(@KEYCOLUMNS,1,1,'')
         IF ISNULL(@KEYCOLUMNS,
'')=''  
         BEGIN
         PRINT 
'SQL Server 2005 中需要提供排序字段,默认为表的主键字段'
         RETURN 
         END
         SET @SQL
='SELECT ID,Name,Orders,InputTime FROM (    
            SELECT ROW_NUMBER()OVER(ORDER BY '+@KEYCOLUMNS+' ) AS ROWID,* FROM HouseInfo 
           ) AS MYTABLE 
         WHERE ROWID BETWEEN 
'+LTRIM(@PageSize)+'*('+LTRIM(@PageIndex)+'-1)+1 and '+LTRIM(@PageSize)+'*'+LTRIM(@PageIndex)+'  ' 
        END
        IF ISNULL(@SearchCondition,
'')<>''  AND ISNULL(@OrderList,'')=''
        BEGIN
         SELECT @KEYCOLUMNS
=@KEYCOLUMNS+','+A.NAME
         FROM SYSCOLUMNS A INNER JOIN  SYSTYPES B
         ON A.XUSERTYPE
=B.XUSERTYPE AND ID=OBJECT_ID('HouseInfo')
         AND  EXISTS(SELECT 
1 FROM SYSOBJECTS 
            WHERE XTYPE
='PK' AND PARENT_OBJ=A.ID AND NAME IN (
             SELECT NAME FROM SYSINDEXES 
             WHERE INDID IN(
             SELECT INDID FROM SYSINDEXKEYS 
             WHERE ID 
= A.ID AND COLID=A.COLID
                )
                         )
         )
         SET @KEYCOLUMNS
=STUFF(@KEYCOLUMNS,1,1,'')
         IF ISNULL(@KEYCOLUMNS,
'')='' 
         BEGIN
         PRINT 
'SQL Server 2005 中需要提供排序字段,默认为表的主键字段'
         RETURN 
         END
         SET @SQL
='SELECT ID,Name,Orders,InputTime FROM (    
            SELECT ROW_NUMBER()OVER(ORDER BY '+@KEYCOLUMNS+' ) AS ROWID,* FROM HouseInfo 
           ) AS MYTABLE 
         WHERE ROWID BETWEEN 
'+LTRIM(@PageSize)+'*('+LTRIM(@PageIndex)+'-1)+1 and '+LTRIM(@PageSize)+'*'+LTRIM(@PageIndex)+' 
         AND @SearchCondition 
' 
        END
        IF ISNULL(@SearchCondition,
'')<>''  AND ISNULL(@OrderList,'')<>'' 
        BEGIN
      SET @SQL
='SELECT ID,Name,Orders,InputTime FROM (    
        SELECT ROW_NUMBER()OVER(ORDER BY '+@OrderList+' ) AS ROWID,* FROM HouseInfo 
       ) AS MYTABLE 
      WHERE ROWID BETWEEN 
'+LTRIM(@PageSize)+'*('+LTRIM(@PageIndex)+'-1)+1 and '+LTRIM(@PageSize)+'*'+LTRIM(@PageIndex)+' 
      AND @SearchCondition 
' 
        END
        EXEC(@SQL)
    SET NOCOUNT OFF
END
GO


6、添加QRCodeTec.Model层项目(以后代码生成器完成)。
 
using System;
using System.Collections.Generic;
using System.Text;

namespace QRCodeTec.Model
{
    
public class ObjHouseInfo
    
{
        
Model Model
    }

}




7、添加QRCodeTec.DataAccess层项目(以后代码生成器完成)。
using System;
using System.Collections.Generic;
using System.Text;
using QRCodeTec.Model;
using System.Data;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Logging;

namespace QRCodeTec.DataAccess
{
    
public class DALHouseInfo
    
{
        
/// <summary>
        
/// 获取住宅数据信息,排序参数:Orders
        
/// </summary>

        public List<ObjHouseInfo> getHouseInfoList()
        
{
            List
<ObjHouseInfo> houseinfodetail = null;
            
try
            
{
                Database db 
= DatabaseFactory.CreateDatabase();
                DbCommand dbc 
= db.GetStoredProcCommand("SP_HouseInfo_Query");
                db.AddInParameter(dbc, 
"@SearchCondition", System.Data.DbType.String, "");
                db.AddInParameter(dbc, 
"@OrderList", System.Data.DbType.String, " Orders");
                db.AddInParameter(dbc, 
"@PageSize", System.Data.DbType.Int32, 10248);
                db.AddInParameter(dbc, 
"@PageIndex", System.Data.DbType.Int32, 1);
                IDataReader dr 
= db.ExecuteReader(dbc);
                houseinfodetail 
= this.getHouseInfoListFromReader(dr);
                dr.Close();
            }

            
catch (Exception ex)
            
{

            }

            
return houseinfodetail;
        }



        
/// <summary>
        
/// 从Reader中得到ProjectInfo信息
        
/// </summary>
        
/// <param name="dr"></param>
        
/// <returns></returns>

        protected virtual ObjHouseInfo getHouseInfoFromReader(IDataReader dr)
        
{
            ObjHouseInfo houseinfo 
= new ObjHouseInfo();
            houseinfo.ID 
= dr.GetInt32(0);
            houseinfo.Name 
= dr.GetString(1);
            houseinfo.Orders 
= dr.GetInt32(2);
            houseinfo.InputTime 
= dr.GetDateTime(3);
            
return houseinfo;
        }

        
/// <summary>
        
/// 从Reader中得到 HouseInfo的List
        
/// </summary>
        
/// <param name="reader"></param>
        
/// <returns></returns>

        protected virtual List<ObjHouseInfo> getHouseInfoListFromReader(IDataReader reader)
        
{
            List
<ObjHouseInfo> HouseInfoList = new List<ObjHouseInfo>();
            
while (reader.Read())
            
{
                HouseInfoList.Add(getHouseInfoFromReader(reader));
            }

            
return HouseInfoList;
        }


    }

}



//添加引用:Microsoft.Practices.EnterpriseLibrary.Common、Microsoft.Practices.EnterpriseLibrary.Data、
//    Microsoft.Practices.ObjectBuilder 
   (路径: 如: D:Program FilesMicrosoft Enterprise Library January 2006in)


 

8、添加QRCodeTec.Business层项目(以后代码生成器完成)。
using System;
using System.Collections.Generic;
using System.Text;
using QRCodeTec.Model;

namespace QRCodeTec.Business
{
    
public class BLHouseInfo
    
{
        
public List<ObjHouseInfo> GetDACHouseInfo()
        
{
            List
<ObjHouseInfo> HouseInfo = null;
            
try
            
{
                QRCodeTec.DataAccess.DALHouseInfo DALhouseinfo 
= new QRCodeTec.DataAccess.DALHouseInfo();
                HouseInfo 
= DALhouseinfo.getHouseInfoList();
            }

            
catch
            
{
              
            }

            
return HouseInfo;
        }

    }

}





//添加引用:QRCodeTec.Model.dll、QRCodeTec.DataAccess.dll 即可。


9、添加QRCodeTec.Common层项目(公共方法属性,都放在该层,包括:图表、通用消息、邮件等)。

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;

namespace QRCodeTec.Common
{
    
public class MessageBox
    
{

        
/// <summary>
        
/// 显示消息提示对话框
        
/// </summary>
        
/// <param name="page">当前页面指针,一般为this</param>
        
/// <param name="msg">提示信息</param>

        public static void ClientAlert(string Message, Page page)
        
{
            StringBuilder scriptstring 
= new StringBuilder();
            scriptstring.Append(
"<script language=javascript>");
            scriptstring.Append(
"window.alert('" + Message + "');");
            scriptstring.Append(
"</script>");
            
string js = scriptstring.ToString();
            page.ClientScript.RegisterStartupScript(page.GetType(), 
"clientwindowsmessage", js);
        }


 

        
/// <summary>
        
/// 控件点击 消息确认提示框
        
/// </summary>
        
/// <param name="page">当前页面指针,一般为this</param>
        
/// <param name="msg">提示信息</param>

        public static void ShowConfirm(System.Web.UI.WebControls.WebControl Control, string msg)
        
{
            
//Control.Attributes.Add("onClick","if (!window.confirm('"+msg+"')){return false;}");
            Control.Attributes.Add("onclick""return confirm('" + msg + "');");
        }


        
/// <summary>
        
/// 显示消息提示对话框,并进行页面跳转
        
/// </summary>
        
/// <param name="page">当前页面指针,一般为this</param>
        
/// <param name="msg">提示信息</param>
        
/// <param name="url">跳转的目标URL</param>

        public static void ShowAndRedirect(System.Web.UI.Page page, string msg, string url)
        
{
            StringBuilder Builder 
= new StringBuilder();
            Builder.Append(
"<script language='javascript' defer>");
            Builder.AppendFormat(
"alert('{0}');", msg);
            Builder.AppendFormat(
"top.location.href='{0}'", url);
            Builder.Append(
"</script>");
            page.ClientScript.RegisterStartupScript(page.GetType(), 
"message", Builder.ToString());

        }

        
public static void ShowConfirmAndRedirect(System.Web.UI.Page page, string msg, string url)
        
{
            StringBuilder Builder 
= new StringBuilder();
            Builder.Append(
"<script language='javascript' defer>");
            Builder.AppendFormat(
"return confirm(('{0}');", msg);
            Builder.AppendFormat(
"top.location.href='{0}'", url);
            Builder.Append(
"</script>");
            page.ClientScript.RegisterStartupScript(page.GetType(), 
"message", Builder.ToString());

        }


        
/// <summary>
        
/// 输出自定义脚本信息
        
/// </summary>
        
/// <param name="page">当前页面指针,一般为this</param>
        
/// <param name="script">输出脚本</param>

        public static void ResponseScript(System.Web.UI.Page page, string script)
        
{
            page.ClientScript.RegisterStartupScript(page.GetType(), 
"message""<script language='javascript' defer>" + script + "</script>");
        }


        
/// <summary>
        
/// 输出自定义脚本信息
        
/// </summary>
        
/// <param name="page">当前页面指针,一般为this</param>
        
/// <param name="script">输出脚本</param>

        public static void ResponseScript(string script)
        
{
            System.Web.HttpContext.Current.Response.Write(
"<script language='javascript' defer>" + script + "</script>");
        }

    }

}


//添加引用:System.Web。


10、添加QRCodeTec.UI层项目
 
//添加引用:QRCodeTec.Business;
        
//绑定数据:
 QRCodeTec.Business.BLHouseInfo blhouseinfo = new QRCodeTec.Business.BLHouseInfo();
        GridView1.DataSource 
= blhouseinfo.GetDACHouseInfo();
        GridView1.DataBind();

//基本上上显示功能已经完成,在以后文章中会继续介绍企业库的其它7个Application block组成的使用。

//如果给数据库中的表添加测试数据,应该就能显示数据了。用企业库就是这么简单。

 

效果图:


以后会陆续在改软件架构上做其它功能。

原创粉丝点击