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#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组成的使用。
//如果给数据库中的表添加测试数据,应该就能显示数据了。用企业库就是这么简单。
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#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组成的使用。
//如果给数据库中的表添加测试数据,应该就能显示数据了。用企业库就是这么简单。
效果图:
以后会陆续在改软件架构上做其它功能。
- VS2005基于Microsoft Enterprise Library January 2006 的网站架构(一)
- .Net技术架构补充(基于Enterprise Library)
- Microsoft Enterprise Library的简介和下载
- Microsoft Enterprise Library 发布
- Microsoft Enterprise Library 4.0
- Microsoft Enterprise Library
- Microsoft Enterprise Library
- Microsoft Enterprise Library 5.0 系列(一) Caching Application Block (高级)
- Microsoft Enterprise Library 5.0 系列(一) : Caching Application Block (初级)
- Microsoft Enterprise Library 5.0 系列(一) Caching Application Block (高级)
- Microsoft Enterprise Library 5.0 系列(一) : Caching Application Block (初级)
- Microsoft Enterprise Library 5.0 系列(一) Caching Application Block (高级)
- 微软企业类库:Enterprise Library for .NET Framework 2.0 - January 2006
- How to make Microsoft Enterprise Library June 2005 June release work with VS2005 beta 2?
- 微软企业库 Microsoft Enterprise Library
- 工具分享:Microsoft Enterprise Library
- Microsoft Enterprise Library: Logging 模块
- Microsoft Enterprise Library: Cache 模块
- Web开发技术最佳教程合辑
- Description of COM principle
- 正则表达式
- WPF,你准备好了吗?
- Microsoft.NET Framework 全面开源
- VS2005基于Microsoft Enterprise Library January 2006 的网站架构(一)
- 核心统一过程EssUP——实践成为一等公民
- Perl 中的正则表达式
- asp.net网站管理工具的问题
- γin F do
- Mastering OpenLDAP: Configuring, Securing and Integrating Directory, Services (Paperback) Aug.2007.eBook-BBL
- PHP Oracle Web Development: Data processing, Security, Caching, XML, Web Services, and Ajax (Paperback) Aug.2007.eBook-BBL
- CCNA Exam Prep (Exam 640-802) (2nd Edition) (Exam Prep) (Paperback), Dec.2007.eBook-BBL
- Networking with Microsoft Windows Vista: Your Guide to Easy and, Secure Windows Vista Networking (Paperback) Dec.2007.eBook-BBL