返回首页
当前位置: 银光首页 > 学习教程 > 技巧提高 >

图文详解Silverlight访问MSSQL数据库

时间:2009-12-29 23:06来源:SilverlightChina.Net 作者:Jv9 点击:
在 银光中国网 ( SilverlightChina.Net )有一篇 Silverlight与常用数据库互操作系列 文章,其中介绍了使用Silverlight存取不同数据库的方法和步骤。但是对于Silverlight存取MS SQL介绍的不够全面,这里我想介绍Silverlight如何通过WCF访问MSSQL数据库存储过程的。希望
  

银光中国网SilverlightChina.Net)有一篇"Silverlight与常用数据库互操作系列"文章,其中介绍了使用Silverlight存取不同数据库的方法和步骤。但是对于Silverlight存取MS SQL介绍的不够全面,这里我想介绍Silverlight如何通过WCF访问MSSQL数据库存储过程的。希望对大家能够有所帮助。

 

我们要实现, 用户输入用户名和密码后,点击登录按钮,传递用户名和密码到服务器端, 通过WCF访问MSSQL数据库,调用存储过程,在服务器端对用户名和密码进行匹配,匹配成功,则返回登录成功,否则,则是失败。

 

在文章开始前,我们需要做一下准备工作,

  • 开发环境需求: VS2008 SP1, Silverlight 3 Develop Tools for VS2008 SP1, 客户端Silverlight 3 Runtime, MSSQL 2005 SP3 ;
  • 建立例程数据库 SilverlightDemo,在数据库中建立一个新表 Users,包含以下字段;

 

 

添加内容到Users表,为了方便起见,密码全部使用明文,在正式项目中,建议对密码字段进行加密使用。

 

 

这里,我们验证用户名和密码,有两种简单方式,

一是使用存储过程读取用户名和密码,然后在服务器端进行用户名和密码匹配校验,如果查找到匹配数据,则返回登录成功,否则,则是登录失败;

二是传用户名和密码到存储过程中,在数据库存储过程中进行判断,使用Select语句进行查找,对应用户名和密码,如果查找到匹配结果,则返回用户ID, 服务器端接收到用户ID,则返回登录成功,否则,则是失败;

 

在本例中,主要是对Silverlight访问数据库进行讲述,所以,对于验证方法,不进行详细描述和讲解,如果有问题,可以留言给我,我们继续讨论,这里,我将使用第一种验证方法。 为此,建立一个简单的存储过程:

 

 1 CREATE PROCEDURE [dbo].[Login]
 2 @UserName Varchar(30))
 3 AS
 4     
 5        Select cUserName, cPassword
 6        From Users
 7        Where cUserName = @UserName
 8 
 9     RETURN
10 
11 SET NOCOUNT ON

 

 在完成上面的准备工作后,开始建立新的Silverlight项目,

1. 建立一个新项目"SilverlightDBDemo",

 

 

2. 在MainPage中建立简单的登录界面,如下:

 

 

3. 在Web项目中添加新选项

 

 

4. 添加一个简单的用户信息类Users,作为WCF的契约成员,当我们从数据库中读取信息后,将赋值给该类的契约成员,方便客户端进行调用;

 

 

VS2008将自动生成Users类代码,在类命名前添加数据契约属性[DataContract()]。 为了能够使绑定数据返回修改通知,这里需要继承INotifyPropertyChanged接口,该步骤不添加对本教程也没有影响,为了以后例程代码完整性,这里我继承了该接口。在接口上点击右键,生成代码。

 

代码如下:

 1 namespace SilverlightDBDemo.Web
 2 {
 3     [DataContract()]
 4     public class Users : INotifyPropertyChanged
 5     {
 6 
 7         #region INotifyPropertyChanged Members
 8 
 9         public event PropertyChangedEventHandler PropertyChanged;
10 
11         #endregion
12     }
13 }
14 

 

 

5. 在Users类中,添加契约成员

 1         private string userName;
 2         [DataMember()]
 3         public string UserName
 4         {
 5             get { return userName; }
 6             set { userName = value;}
 7         }
 8 
 9         private string password;
10         [DataMember()]
11         public string Password
12         {
13             get { return password;  }
14             set { password = value; }
15         }

 

 

6. 建立构造函数 public Users(string sUserName,string sPassword),传递用户名和密码给契约成员;

 

 1 using System;
 2 using System.ComponentModel;
 3 using System.Runtime.Serialization;
 4 
 5 namespace SilverlightDBDemo.Web
 6 {
 7     [DataContract()]
 8     public class Users : INotifyPropertyChanged
 9     {
10         private string userName;
11         [DataMember()]
12         public string UserName
13         {
14             get { return userName; }
15             set { userName = value;}
16         }
17 
18         private string password;
19         [DataMember()]
20         public string Password
21         {
22             get { return password;  }
23             set { password = value; }
24         }
25 
26         public Users(string sUserName,string sPassword)
27         {
28             UserName = sUserName;
29             Password = sPassword;
30         }
31 
32         #region INotifyPropertyChanged Members
33 
34         public event PropertyChangedEventHandler PropertyChanged;
35 
36         #endregion
37     }
38 }

 

7. 添加"Silverlight-enabled WCF Service",修改服务名字为 DBService.svc,需要注意的是,WCF service对于Silverlight仅支持BasicHttpBinding,而VS2008自动生成是customBinding,很多朋友说使用了"Silverlight-enabled WCF Service",链接数据库仍旧失败,无法找到远程服务器,是因为没有使用BasicHttpBinding进行通讯,造成的失败。

后文我将讲述如何修改。

 

8. 添加后,在Web服务器端会有DBService.svc和DBService.svc.cs文件出现,VS2008将自动更新Web项目的类库引用;

 

9. 双击进入DBService.svc.cs文件,可以看到以下代码:

 

 1 using System;
 2 using System.Linq;
 3 using System.Runtime.Serialization;
 4 using System.ServiceModel;
 5 using System.ServiceModel.Activation;
 6 using System.Collections.Generic;
 7 using System.Text;
 8 
 9 namespace SilverlightDBDemo.Web
10 {
11     [ServiceContract(Namespace = "")]
12     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
13     public class DBService
14     {
15         [OperationContract]
16         public void DoWork()
17         {
18             // Add your operation implementation here
19             return;
20         }
21 
22         // Add more operations here and mark them with [OperationContract]
23     }
24 }

 

这里我们没有修改ServiceContract命名空间,所以保持默认为空,AspNet的兼容需求模式我们保持默认。在正式项目中,我们习惯将所有的[OperationContract]函数放入一个接口文件中,这样方便扩展以及维护,在本例,为了方便大家理解,就不把[OperationContract]放入接口文件。 在VS2008自动生成代码下面直接添加数据库访问代码。

 

 

顶一下
(29)
85.3%
踩一下
(5)
14.7%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容