.NET平台三层应用程序框架搭建(一)
这个例子表示层采用WinForm;业务逻辑层直接写在了WCF服务中,当然最好是把服务层和业务逻辑层进行分离,因为本实例比较简单,就直接把业务逻辑层写在了服务层中;数据访问层采用ADO.NET技术;后台数据库使用SQL Server 2005。
一、数据库设计
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表的存储过程,代码如下:
USE [MySolution] GO /****** 对象: StoredProcedure [dbo].[SelectUser] 脚本日期: 11/29/2010 18:46:38 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <崔永华> -- Create date: <2010年11月29日> -- Description: <查询用户信息> -- ============================================= CREATE PROCEDURE [dbo].[SelectUser]( @Fields nvarchar(1000), --要查询的字段 @SqlWhere nvarchar(1000), --查询条件,不包含Where关键字 @OrderFields nvarchar(1000)) --排序字段 AS BEGIN SET NOCOUNT ON; DECLARE @Sql nvarchar(2000); SET @Sql='SELECT ' + @Fields + ' FROM Users WHERE ' + @SqlWhere + ' ORDER BY ' + @OrderFields; SET NOCOUNT OFF; EXEC(@Sql); END
二、实体类
1、首先创建一个空项目:文件→新建→项目→其他项目类型→Visual Studio解决方案,选择空白解决方案,取名为“MySolution”。
2、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→Windows→类库,取名为“实体类”。将“Class1.cs”重新命名为“User.cs”。
3、在“实体类”项目中添加对“System.ServiceModel”和“System.Runtime.Serialization”类库的引用,如下所示:
编写的实体类如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using System.ServiceModel; namespace 实体类 { [DataContract] public class User { private string userName; private string loginPassword; private string memo; [DataMember] public string UserName { get { return userName; } set { userName = value; } } [DataMember] public string LoginPassword { get { return loginPassword; } set { loginPassword = value; } } [DataMember] public string Memo { get { return memo; } set { memo = value; } } } }
三、数据访问层
1、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→Windows→类库,取名为“数据访问层”。将“Class1.cs”重新命名为“UserData.cs”。
2、在“数据访问层”项目中,添加对“System.configuration”和“实体类”类库的引用,如下所示:
编写数据访问层代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace 数据访问层 { public class UserData { private readonly string strConnection = ConfigurationManager.AppSettings.Get("MySolution"); private SqlConnection con = null; public DataSet SelectUser(string strFields, string strSqlWhere, string strOrderFields) { con = new SqlConnection(strConnection); SqlCommand cmd = new SqlCommand("dbo.SelectUser", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@Fields", SqlDbType.NVarChar).Value = strFields; cmd.Parameters.Add("@SqlWhere", SqlDbType.NVarChar).Value = strSqlWhere; cmd.Parameters.Add("@OrderFields", SqlDbType.NVarChar).Value = strOrderFields; DataSet dstUser = new DataSet(); SqlDataAdapter dt = new SqlDataAdapter(cmd); dt.Fill(dstUser, "Users"); return dstUser; } } }
四、服务层
1、在解决方案资源管理器中,鼠标右击解决方案“MySolution”,选择:添加→新建项目→Visual C#→WCF→WCF服务库,取名为“服务层”。添加完成如下所示:
2、删除自动生成的“IService1.cs”和“Service1.cs”。
3、添加两个新类,分别命名为:“IMySolutionServices.cs”和“MySolutionServices.cs”。
4、在“服务层”项目中,添加对“实体类”和“数据访问层”类库的引用,如下所示:
5、接口“IMySolutionServices.cs”的代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.Data; using 实体类; namespace 服务层 { [ServiceContract(Namespace = "http://www.jieyouinfo.com/cuiyh/")] public interface IMySolutionServices { [OperationContract] DataSet SelectUser(string strFields, string strSqlWhere, string strOrderFields); } }
6、类“MySolutionServices.cs”的代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using 实体类; using 数据访问层; namespace 服务层 { public class MySolutionServices : IMySolutionServices { public DataSet SelectUser(string strFields, string strSqlWhere, string strOrderFields) { return new 数据访问层.UserData().SelectUser(strFields, strSqlWhere, strOrderFields); } } }
7、进行WCF服务层的配置
用鼠标右键单击“服务层”项目中的“App.config”,选择“编辑WCF配置”,出现如下窗体:
点击“Name”后的“…”按钮,出现如下窗体:
双击“服务层.MySolutionServices”后,返回如下窗体:
选择“终结点”下的第一个“空名称”,出现如下界面:
点击“Contract”后的“…”按钮,出现如下窗体:
双击“服务层.IMySolutionServices”,返回到如下窗体:
然后选择“文件”→“保存”。至此WCF服务配置完毕。