1、安装Enterprise Library January 2006.exe 2、建立好项目的Web站点。(UI层) 如:QrcodeTecWebSite3、利用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' go5、生成查询的存储过程(自己的存储过程代码生成器,(注:该存储过程可以优化) 代码生成器参考:http://blog.youkuaiyun.com/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_QueryGO /**//*+--------------------------------------+| 过程名称: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 --要显示的页码ASBEGIN 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 OFFENDGO6、添加QRCodeTec.Model层项目(以后代码生成器完成)。 using System;using System.Collections.Generic;using System.Text;namespace QRCodeTec.Model...{ public class ObjHouseInfo ...{ Model#region Model private Int32 _id; private string _name; private Int32 _orders; private DateTime _inputtime; /**//// <summary> /// 标识ID /// </summary> public Int32 ID ...{ set ...{ _id = value; } get ...{ return _id; } } /**//// <summary> /// 小区名称 /// </summary> public string Name ...{ set ...{ _name = value; } get ...{ return _name; } } /**//// <summary> /// 顺序号 /// </summary> public Int32 Orders ...{ set ...{ _orders = value; } get ...{ return _orders; } } /**//// <summary> /// 入库时间 /// </summary> public DateTime InputTime ...{ set ...{ _inputtime = value; } get ...{ return _inputtime; } } #endregion 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组成的使用。//如果给数据库中的表添加测试数据,应该就能显示数据了。用企业库就是这么简单。 效果图:以后会陆续在改软件架构上做其它功能。