.NET平台三层应用程序框架搭建
时间:2010-11-29 来源:崔永华
一、数据库设计
1、我们设计一个简单的用户表(Users),如下:
序号 |
列名 |
数据类型 |
为空性 |
主键 |
外键 |
默认值 |
界面字段 |
说明 |
1 |
id |
int |
否 |
是 |
否 |
|
否 |
id号(种子) |
2 |
userName |
nvarchar(20) |
否 |
否 |
否 |
|
是 |
用户名 |
3 |
loginPassword |
nvarchar(30) |
否 |
否 |
否 |
|
是 |
用户密码 |
4 |
memo |
nvarchar(50) |
是 |
否 |
否 |
|
是 |
备注 |
2、配置SQL Server 2005
1)打开“SQL Server 外围应用配置器”,如下:
点击“服务和连接的外围应用配置器”,然后出现如下界面:
选择远程连接,然后选择:本地连接和远程连接(R)→仅使用TCP/IP(T)。
2)右击我的电脑→管理→本地用户和组→组,然后双击“Administrators”组,点击“添加”按钮,点击“高级”,点击“立即查找”,双击“NETWORK SERVICE”这个用户,然后点击“确定”按钮两次,完成用户的添加。
3)在SQL Server 2005中创建数据库“MySolution”,然后依次展开节点:MySolution→安全性→用户,右键单击节点“用户”,选择“新建用户”,出现如下界面:
然后回到常规选项卡:
2)右击我的电脑→管理→本地用户和组→组,然后双击“Administrators”组,点击“添加”按钮,点击“高级”,点击“立即查找”,双击“NETWORK SERVICE”这个用户,然后点击“确定”按钮两次,完成用户的添加。
3)在SQL Server 2005中创建数据库“MySolution”,然后依次展开节点:MySolution→安全性→用户,右键单击节点“用户”,选择“新建用户”,出现如下界面:
点击“…”按钮,点击“浏览”,选中“[NT AUTHORITY\NETWORK SERVICE]”登录名,点击两次“确定”按钮。
然后回到常规选项卡:
默认架构选择“dbo”,此用户拥有的架构选择“db_owner”,数据库角色成员身份(M)选择“db_owner”。
3、在数据库“MySolution”中创建表Users。
4、编写查询Users表的存储过程,代码如下:
1、首先创建一个空项目:文件→新建→项目→其他项目类型→Visual Studio解决方案,选择空白解决方案,取名为“MySolution”。
2、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→Windows→类库,取名为“实体类”。将“Class1.cs”重新命名为“User.cs”。
3、在“实体类”项目中添加对“System.ServiceModel”和“System.Runtime.Serialization”类库的引用,如下所示:
编写的实体类如下:
默认架构选择“dbo”,此用户拥有的架构选择“db_owner”,数据库角色成员身份(M)选择“db_owner”。
3、在数据库“MySolution”中创建表Users。
4、编写查询Users表的存储过程,代码如下:
1 USE [MySolution]
2 GO
3 /****** 对象: StoredProcedure [dbo].[SelectUser] 脚本日期: 11/29/2010 17:57:14 ******/
4 SET ANSI_NULLS ON
5 GO
6 SET QUOTED_IDENTIFIER ON
7 GO
8 -- =============================================
9 -- Author: <崔永华>
10 -- Create date: <2010年11月29日>
11 -- Description: <查询用户信息>
12 -- =============================================
13 CREATE PROCEDURE [dbo].[SelectUser](
14 @Fields nvarchar(1000), --要查询的字段
15 @SqlWhere nvarchar(1000), --查询条件,不包含Where关键字
16 @OrderFields nvarchar(1000)) --排序字段
17 AS
18 BEGIN
19 SET NOCOUNT ON;
20 DECLARE @Sql nvarchar(2000);
21 SET @Sql='SELECT ' + @Fields + ' FROM Users WHERE ' + @SqlWhere + ' ORDER BY ' + @OrderFields;
22 SET NOCOUNT OFF;
23 EXEC(@Sql);
24 END
25
二、实体类
1、首先创建一个空项目:文件→新建→项目→其他项目类型→Visual Studio解决方案,选择空白解决方案,取名为“MySolution”。
2、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→Windows→类库,取名为“实体类”。将“Class1.cs”重新命名为“User.cs”。
3、在“实体类”项目中添加对“System.ServiceModel”和“System.Runtime.Serialization”类库的引用,如下所示:
编写的实体类如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Runtime.Serialization;
6 using System.ServiceModel;
7
8 namespace 实体类
9 {
10 [DataContract]
11 public class User
12 {
13 private string userName;
14 private string loginPassword;
15 private string memo;
16
17 [DataMember]
18 public string UserName
19 {
20 get { return userName; }
21 set { userName = value; }
22 }
23
24 [DataMember]
25 public string LoginPassword
26 {
27 get { return loginPassword; }
28 set { loginPassword = value; }
29 }
30
31 [DataMember]
32 public string Memo
33 {
34 get { return memo; }
35 set { memo = value; }
36 }
37 }
38 }
39
三、数据访问层
1、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→Windows→类库,取名为“数据访问层”。将“Class1.cs”重新命名为“UserData.cs”。
2、在“数据访问层”项目中,添加对“System.configuration”和“实体类”类库的引用,如下所示:
编写数据访问层代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 using System.Data.SqlClient;
7 using System.Configuration;
8
9 namespace 数据访问层
10 {
11 public class UserData
12 {
13 private readonly string strConnection = ConfigurationManager.AppSettings.Get("MySolution");
14 private SqlConnection con = null;
15
16 public DataSet SelectUser(string strFields, string strSqlWhere, string strOrderFields)
17 {
18 con = new SqlConnection(strConnection);
19 SqlCommand cmd = new SqlCommand("dbo.SelectUser", con);
20 cmd.CommandType = CommandType.StoredProcedure;
21 cmd.Parameters.Add("@Fields", SqlDbType.NVarChar).Value = strFields;
22 cmd.Parameters.Add("@SqlWhere", SqlDbType.NVarChar).Value = strSqlWhere;
23 cmd.Parameters.Add("@OrderFields", SqlDbType.NVarChar).Value = strOrderFields;
24 DataSet dstUser = new DataSet();
25 SqlDataAdapter dt = new SqlDataAdapter(cmd);
26 dt.Fill(dstUser, "Users");
27 return dstUser;
28 }
29 }
30 }
31
四、服务层
1、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→WCF→WCF服务库,取名为“服务层”。添加完成如下所示:
2、删除自动生成的“IService1.cs”和“Service1.cs”。
3、添加两个新类,分别命名为:“IMySolutionServices.cs”和“MySolutionServices.cs”。
4、在“服务层”项目中,添加对“实体类”和“数据访问层”类库的引用,如下所示:
5、接口“IMySolutionServices.cs”的代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.ServiceModel;
6 using System.Data;
7 using 实体类;
8
9 namespace 服务层
10 {
11 [ServiceContract(Namespace = "http://www.jieyouinfo.com/cuiyh/")]
12 public interface IMySolutionServices
13 {
14 [OperationContract]
15 DataSet SelectUser(string strFields, string strSqlWhere, string strOrderFields);
16 }
17 }
18
6、类“MySolutionServices.cs”的代码如下:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Data;
6 using 实体类;
7 using 数据访问层;
8
9 namespace 服务层
10 {
11 public class MySolutionServices : IMySolutionServices
12 {
13 public DataSet SelectUser(string strFields, string strSqlWhere, string strOrderFields)
14 {
15 return new 数据访问层.UserData().SelectUser(strFields, strSqlWhere, strOrderFields);
16 }
17 }
18 }
19
7、进行WCF服务层的配置
用鼠标右键单击“服务层”项目中的“App.config”,选择“编辑WCF配置”,出现如下窗体:
点击“Name”后的“…”按钮,出现如下窗体:
双击“服务层.MySolutionServices”后,返回如下窗体:
选择“终结点”下的第一个“空名称”,出现如下界面:
点击“Contract”后的“…”按钮,出现如下窗体:
双击“服务层.IMySolutionServices”,返回到如下窗体:
然后选择“文件”→“保存”。至此WCF服务配置完毕。
五、IIS寄宿
1、在解决方案资源管理器中,鼠标右击解决方案“MySolution“,选择:添加→新建网站→WCF服务,出现如下窗体:
点击“确定”按钮,创建完毕。界面如下所示:
2、删除自动生成的“IService.cs”和“Service.cs”。
3、鼠标右击网站项目,选择“添加引用”,出现如下窗体:
选择“服务层”类库,确定即可。目前网站项目的结构如下:
4、双击“Service.svc”打开该文件进行修改,修改后的文件如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="服务层.MySolutionServices" %>
5、鼠标右击“网站项目”中的“Web.config”文件,选择“编辑WCF配置”,出现如下窗体:
点击“Name”后的“…”按钮,出现如下窗体:
单击“打开”按钮即可。
点击“终结点”下的第一个“空名称”,出现如下窗体:
点击“Contract”后的“…”按钮,出现如下窗体:
点击“打开”按钮即可。
点击“文件”→“保存”,然后退出即可。
6、双击“Web.config”文件,在代码中添加以下代码:
<appSettings>
<!-- 映射的数据库连接字符串 -->
<add key="MySolution" value="Data Source=(local);Integrated security=SSPI;Initial Catalog=MySolution;"/>
</appSettings>
8、右击网站项目,选择“生成网站”。
9、右击网站项目,选择“发布网站”,出现如下窗体:
点击确定即可。
10、右击网站项目中的“Service.svc”,选择“在浏览器中查看”,如果出现以下界面,就说明配置成功。
地址是:http://127.0.0.1/MySolutionWCFService/Service.svc
11、重新打开“Web.config”文件,找到如下代码处:
六、表示层
1、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→Windows→Windows窗体应用程序,取名为“表示层”。将“表示层”中的Form1删除,然后鼠标右击“表示层”这个项目名称,选择:添加→Windows窗体,将这个窗体取名为:frmLogin。将“frmLogin”窗体设计成如下形式:
然后双击“Program.cs”文件,将程序中的“Application.Run(new Form1());”语句修改为“Application.Run(new frmLogin());”。
2、鼠标右击“表示层”项目,选择“添加服务引用”,出现如下窗体:
在地址栏中输入地址:http://127.0.0.1/MySolutionWCFService/Service.svc
点击“前往”按钮,出现如下窗体:
将命名空间取名为“MySolutionService”,点击确定即可。这时的表示层项目结构如下:
3、打开frmLogin窗体,在窗体的Load函数中添加如下代码:
1 private void frmLogin_Load(object sender, EventArgs e)
2 {
3 MySolutionService.MySolutionServicesClient proxy = new 表示层.MySolutionService.MySolutionServicesClient();
4 DataSet dst = proxy.SelectUser("id,userName", "1=1", "id");
5 cboUser.DataSource = dst.Tables["Users"];
6 cboUser.DisplayMember = "userName";
7 cboUser.ValueMember = "id";
8 cboUser.SelectedIndex = -1;
9 }
至此全部完成,将表示层设置为启动项目,应该能够读取数据库中的数据。
<system.web>
<!--
设置 compilation debug="true" ,将调试符号
插入已编译的页面中。但由于这会影响性能,
因此请只在开发过程中
将此值设置为 true。
-->
<compilation debug="false">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
将<compilation debug=”false”>修改为<compilation debug=”true”>
- 系统休眠文件删除后果 如何删除计算机的休眠文件 2025-04-22
- 站群服务器是什么意思 站群服务器的作用 站群服务器和普通服务器的区别 2025-04-22
- jQuery插件有何作用 jQuery插件的使用方法 2025-04-22
- jQuery插件有哪些种类 简单的jQuery插件实例 2025-04-22
-