Silverlight中连接MySQL数据库实例详解.docx

上传人:b****1 文档编号:23171362 上传时间:2023-05-15 格式:DOCX 页数:21 大小:391.38KB
下载 相关 举报
Silverlight中连接MySQL数据库实例详解.docx_第1页
第1页 / 共21页
Silverlight中连接MySQL数据库实例详解.docx_第2页
第2页 / 共21页
Silverlight中连接MySQL数据库实例详解.docx_第3页
第3页 / 共21页
Silverlight中连接MySQL数据库实例详解.docx_第4页
第4页 / 共21页
Silverlight中连接MySQL数据库实例详解.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

Silverlight中连接MySQL数据库实例详解.docx

《Silverlight中连接MySQL数据库实例详解.docx》由会员分享,可在线阅读,更多相关《Silverlight中连接MySQL数据库实例详解.docx(21页珍藏版)》请在冰豆网上搜索。

Silverlight中连接MySQL数据库实例详解.docx

Silverlight中连接MySQL数据库实例详解

Silverlight中连接MySQL数据库实例详解

2009-12-3111:

43 来源:

天极网软件频道 作者:

天极网开发频道 责任编辑:

郑重·yesky 评论(3)

本文将重点讲述Silverlight中连接MySQL数据库实例,这在RIA开发中比较基础,但是也是比较重要的内容。

希望通过本文能让大家对连接MySQL有更深刻的理解。

在银光中国网(SilverlightChina.Net)有一篇"Silverlight与常用数据库互操作系列"文章,其中介绍了使用Silverlight存取不同数据库的方法和步骤。

但是对于Silverlight存取MSSQL介绍的不够全面,这里我想介绍Silverlight如何通过WCF访问MSSQL数据库存储过程的。

希望对大家能够有所帮助。

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

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

开发环境需求:

VS2008SP1,Silverlight3DevelopToolsforVS2008SP1,客户端Silverlight3Runtime,MSSQL2005SP3;

建立例程数据库SilverlightDemo,在数据库中建立一个新表Users,包含以下字段;

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

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

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

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

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

为此,建立一个简单的存储过程:

1.CREATEPROCEDURE[dbo].[Login]

2.(@UserNameVarchar(30))

3.AS

4.SelectcUserName,cPassword

5.FromUsers

6.WherecUserName=@UserName

7.RETURN

8.SETNOCOUNTON

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

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

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

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

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

VS2008将自动生成Users类代码,在类命名前添加数据契约属性[DataContract()]。

为了能够使绑定数据返回修改通知,这里需要继承INotifyPropertyChanged接口,该步骤不添加对本教程也没有影响,为了以后例程代码完整性,这里我继承了该接口。

在接口上点击右键,生成代码。

代码如下:

1.namespaceSilverlightDBDemo.Web

2.{

3.[DataContract()]

4.publicclassUsers:

INotifyPropertyChanged

5.{

6.

7.#regionINotifyPropertyChangedMembers

8.

9.publiceventPropertyChangedEventHandlerPropertyChanged;

10.#endregion

11.}

12.}

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

1.privatestringuserName;

2.[DataMember()]

3.publicstringUserName

4.{

5.get{returnuserName;}

6.set{userName=value;}

7.}

8.

9.privatestringpassword;

10.[DataMember()]

11.publicstringPassword

12.{

13.get{returnpassword;}

14.set{password=value;}

15.}

6.建立构造函数publicUsers(stringsUserName,stringsPassword),传递用户名和密码给契约成员;

1.usingSystem;

2.usingSystem.ComponentModel;

3.usingSystem.Runtime.Serialization;

4.

5.namespaceSilverlightDBDemo.Web

6.{

7.[DataContract()]

8.publicclassUsers:

INotifyPropertyChanged

9.{

10.privatestringuserName;

11.[DataMember()]

12.publicstringUserName

13.{

14.get{returnuserName;}

15.set{userName=value;}

16.}

17.

18.privatestringpassword;

19.[DataMember()]

20.publicstringPassword

21.{

22.get{returnpassword;}

23.set{password=value;}

24.}

25.

26.publicUsers(stringsUserName,stringsPassword)

27.{

28.UserName=sUserName;

29.Password=sPassword;

30.}

31.

32.#regionINotifyPropertyChangedMembers

33.

34.publiceventPropertyChangedEventHandlerPropertyChanged;

35.

36.#endregion

37.}

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

后文我将讲述如何修改。

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

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

1.usingSystem;

2.usingSystem.Linq;

3.usingSystem.Runtime.Serialization;

4.usingSystem.ServiceModel;

5.usingSystem.ServiceModel.Activation;

6.usingSystem.Collections.Generic;

7.usingSystem.Text;

8.

9.namespaceSilverlightDBDemo.Web

10.{

11.[ServiceContract(Namespace="")]

12.[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]

13.publicclassDBService

14.{

15.[OperationContract]

16.publicvoidDoWork()

17.{

18.//Addyouroperationimplementationhere

19.return;

20.}

21.

22.//Addmoreoperationshereandmarkthemwith[OperationContract]

23.}

24.}

这里我们没有修改ServiceContract命名空间,所以保持默认为空,AspNet的兼容需求模式我们保持默认。

在正式项目中,我们习惯将所有的[OperationContract]函数放入一个接口文件中,这样方便扩展以及维护,在本例,为了方便大家理解,就不把[OperationContract]放入接口文件。

在VS2008自动生成代码下面直接添加数据库访问代码。

10.在添加服务器端数据库访问代码前,需要修改Web.Config文件。

和Asp.Net项目一样,在链接数据库前,我们首先需要在Web.Config中配置数据库连接字符串,请自行替换数据库登录ID和密码

1.

2.

3.InitialCatalog=SilverlightDemo;

4.UserId=dev;Password=dev;"/>

5.

11.前文已经说过,Silverlight仅支持使用BasicHttpBinding通过WCFservice进行通讯,而VS2008自动生成的代码是customBinding,所以,我们也需要在Web.Config中进行修改.下面是VS2008自动生成的Web.Config部分代码,划线部分是下面要修改的部分。

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.name="SilverlightDBDemo.Web.DBService">

22.

23.contract="SilverlightDBDemo.Web.DBService"/>

24.

25.

26.

27.

-->这里我们需要修改以下几个地方:

首先删除customBinding,从上面代码,第10行,到17行,使用下面代码替换:

1.

2.

3.

4.maxBufferPoolSize="2147483647"

5.maxReceivedMessageSize="2147483647"

6.maxBufferSize="2147483647">

7.

8.maxArrayLength="2147483647"

9.maxBytesPerRead="2147483647"

10.maxDepth="2147483647"

11.maxNameTableCharCount="2147483647"

12.maxStringContentLength="2147483647"/>

13.

14.

15.

其中那些2147483647之类的属性可以删除,但是如果读取数据库中的大型表格,就需要设置缓冲池之类的尺寸了。

这里,我们已经使用了basicHttpBinding.Bindingname我使用了BasicHttpBinding_DBService,大家可以随意更换,下面将用到。

然后修改22行和23行的代码,将endpoint中的binding,内容修改为basicHttpBinding,bindingConfiguration的内容修改为BasicHttpBinding_DBService。

1.

2.contract="SilverlightDBDemo.Web.DBService"/>

12.现在我们可以在DBService.svc.cs中添加存取数据库代码,对用户名和密码进行简单匹配,这里不再着重讲述如何条件匹配登录信息。

这里演示了如何调用数据库存储过程。

完成存取数据库代码后,成功编译Web项目。

代码有点长,这里折叠起来。

1.privatestringconnectionString=WebConfigurationManager.AppSettings["DbServiceConnectionString"];

2.

3.[OperationContract]

4.publicboolGetUser(stringcUserName,stringcPassword)

5.{

6.SqlConnectionconn=newSqlConnection(connectionString);

7.SqlCommandcmd=newSqlCommand("Login",conn);

8.cmd.CommandType=CommandType.StoredProcedure;

9.cmd.Parameters.AddWithValue("@UserName",cUserName);

10.

11.try

12.{

13.conn.Open();

14.SqlDataReaderreader=cmd.ExecuteReader(CommandBehavior.SingleRow);

15.if(reader.Read())

16.{

17.Usersuser=newUsers((string)reader["cUserName"],

18.(string)reader["cPassword"]);

19.if(user.Password==cPassword)

20.{

21.returntrue;

22.}

23.else

24.{

25.returnfalse;

26.}

27.}

28.else

29.{

30.returnfalse;

31.}

32.}

33.finally

34.{

35.conn.Close();

36.}

37.}

13.在SilverlightDBDemo客户端,点击右键添加服务引用

14.在弹出窗口中,点击"Discover",查找本地WCFservice。

在地址栏会自动搜索到本地的Service引用,在Services树形框中我们可以看到,在服务器端建立的DBService.svc,双击打开,可以看到,我们建立的GetUser函数,以及默认的DoWork函数。

修改下面的命名空间为"DBService",方便调用。

15.点击"Advanced.."高级按钮,确认选中"Reusetypesinreferencedassembiles",如下图,

16.然后,点击确定,会在客户端中生成DBService服务引用。

17.在生成DBService服务引用后,VS2008会自动生成一个ServiceReferences.ClientConfig文件。

我们需要留意查看一下该文件内容。

其中,bindings信息是basicHttpBinding,而endpoint内容和Web.Config中的内容相同。

这里我们不需要修改任何代码。

1.

2.

3.

4.

5.

6.maxReceivedMessageSize="2147483647">

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

//localhost/SilverlightDBDemo.Web/DBService.svc"

17.binding="basicHttpBinding"bindingConfiguration="BasicHttpBinding_DBService"

18.contract="DBService.DBService"name="BasicHttpBinding_DBService"/>

19.

20.

21.

18.下面我们将在客户端调用该服务引用,获取数据库的返回值,根据返回值,我们将简单判断登录是否成功。

进入MainPage.xaml.cs中,建立GetUser方法。

该代码中EndpointAddress是最重要的,出现没有发现远程服务器错误,和这里设置也有关系。

在client_GetUserCompleted中,e.Result代表了数据库返回值。

可以接受任何值,大家可以根据需要进行值类型转换。

每次,用户点击登陆按钮,Silverlight客户端都会向服务器端请求验证,返回结果会在提示信息栏显示。

1.privatevoidGetUser()

2.{

3.EndpointAddressaddress=newEndpointAddress(newUri(Application.Current.Host.Source,"/SilverlightDBDemo.Web/DBService.svc"));

4.DBServiceClientclient=newDBServiceClient(newBasicHttpBinding(),address);

5.client.GetUserCompleted+=client_GetUserCompleted;

6.client.GetUserAsync(txtUsername.Text,pbPassword.Password);

7.}

8.

9.privatevoidclient_GetUserCompleted(objectsender,GetUserCompletedEventArgse)

10.{

11.try

12.{

13.if(e.Result)

14.{

15.tbMessage.Text="登录成功!

";

16.}

17.else

18.{

19.tbMessage.Text="登录失败!

";

20.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1