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自动生成代码下面直接添加数据库访问代码。 10. 在添加服务器端数据库访问代码前,需要修改Web.Config文件。和Asp.Net项目一样,在链接数据库前,我们首先需要在Web.Config中配置数据库连接字符串,请自行替换数据库登录ID和密码 1 < appSettings >
2 < add key ="DbServiceConnectionString" value ="Data Source=(Local);Initial Catalog=SilverlightDemo;User ID=dev;Password=dev;" />
3 </ appSettings > 11. 前文已经说过,Silverlight仅支持使用BasichttpBinding通过WCF service进行通讯,而VS2008自动生成的代码是customBinding,所以,我们也需要在Web.Config中进行修改.下面是VS2008自动生成的Web.Config部分代码,划线部分是下面要修改的部分。 1 < system.serviceModel >
2 < behaviors >
3 < serviceBehaviors >
4 < behavior name ="SilverlightDBDemo.Web.DBServiceBehavior" >
5 < serviceMetadata httpGetEnabled ="true" />
6 < serviceDeBUG includeExceptionDetailinFaults ="False" />
7 </ behavior >
8 </ serviceBehaviors >
9 </ behaviors >
18 < serviceHostingEnvironment aspNetCompatibilityEnabled ="true" />
19 < services >
20 < service behaviorConfiguration ="SilverlightDBDemo.Web.DBServiceBehavior"
21 name ="SilverlightDBDemo.Web.DBService" >
24 < endpoint address ="mex" binding ="mexhttpBinding" contract ="IMetadataExchange" />
25 </ service >
26 </ services >
27 </ system.serviceModel > 这里我们需要修改以下几个地方: 首先删除customBinding,从上面代码,第10行,到17行,使用下面代码替换: 1 < bindings >
2 < basichttpBinding >
3 < binding name ="BasichttpBinding_IDataService"
4 maxBufferPoolSize ="2147483647"
5 maxReceivedMessageSize ="2147483647"
6 maxBufferSize ="2147483647" >
7 < readerQuotas
8 maxArrayLength ="2147483647"
9 maxBytesPerRead ="2147483647"
10 maxDepth ="2147483647"
11 maxnametableCharCount ="2147483647"
12 maxStringContentLength ="2147483647" />
13 </ binding >
14 </ basichttpBinding >
15 </ bindings > 其中那些2147483647之类的属性可以删除,但是如果读取数据库中的大型表格,就需要设置缓冲池之类的尺寸了。这里,我们已经使用了basichttpBinding. Binding name我使用了BasichttpBinding_DBService,大家可以随意更换,下面将用到。 然后修改22行和23行的代码,将endpoint中的binding,内容修改为basichttpBinding,bindingConfiguration的内容修改为BasichttpBinding_DBService。 1 < endpoint address ="" binding ="basichttpBinding" bindingConfiguration ="BasichttpBinding_DBService"
2 contract ="SilverlightDBDemo.Web.DBService" /> 12. 现在我们可以在DBService.svc.cs中添加存取数据库代码,对用户名和密码进行简单匹配,这里不再着重讲述如何条件匹配登录信息。这里演示了如何调用数据库存储过程。完成存取数据库代码后,成功编译Web项目。代码有点长,这里折叠起来。 代码 1 private string connectionString = WebConfigurationManager.AppSettings[ " DbServiceConnectionString " ];
2
3 [OperationContract]
4 public bool GetUser( string cUsername, string cPassword)
5 {
6 sqlConnection conn = new sqlConnection(connectionString);
7 sqlCommand cmd = new sqlCommand( " Login " , conn);
8 cmd.CommandType = CommandType.StoredProcedure;
9 cmd.Parameters.AdDWithValue( " @Username " , cUsername);
10
11 try
12 {
13 conn.open();
14 sqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);
15 if (reader.Read())
16 {
17 Users user = new Users(( string )reader[ " cUsername " ],
18 ( string )reader[ " cPassword " ]);
19 if (user.Password == cPassword)
20 {
21 return true ;
22 }
23 else
24 {
25 return false ;
26 }
27 }
28 else
29 {
30 return false ;
31 }
32 }
33 finally
34 {
35 conn.Close();
36 }
37 } 13. 在SilverlightDBDemo客户端,点击右键添加服务引用 14. 在d出窗口中,点击"discover",查找本地WCF service。在地址栏会自动搜索到本地的Service引用,在Services树形框中我们可以看到,在服务器端建立的DBService.svc,双击打开,可以看到,我们建立的GetUser函数,以及默认的DoWork函数。修改下面的命名空间为"DBService",方便调用。 15. 点击"Advanced.."高级按钮,确认选中"Reuse types in referenced assembiles",如下图, 16. 然后,点击确定,会在客户端中生成DBService服务引用。 17. 在生成DBService服务引用后,VS2008会自动生成一个ServiceReferences.ClIEntConfig文件。 我们需要留意查看一下该文件内容。其中,bindings信息是basichttpBinding,而endpoint内容和Web.Config中的内容相同。这里我们不需要修改任何代码。 1 < configuration >
2 < system.serviceModel >
3 < bindings >
4 < basichttpBinding >
5 < binding name ="BasichttpBinding_DBService" maxBufferSize ="2147483647"
6 maxReceivedMessageSize ="2147483647" >
7 < security mode ="None" >
8 < transport >
9 < extendedProtectionPolicy policyEnforcement ="Never" />
10 </ transport >
11 </ security >
12 </ binding >
13 </ basichttpBinding >
14 </ bindings >
15 < clIEnt >
16 < endpoint address ="http://localhost/SilverlightDBDemo.Web/DBService.svc"
17 binding ="basichttpBinding" bindingConfiguration ="BasichttpBinding_DBService"
18 contract ="DBService.DBService" name ="BasichttpBinding_DBService" />
19 </ clIEnt >
20 </ system.serviceModel >
21 </ configuration >
22 18. 下面我们将在客户端调用该服务引用,获取数据库的返回值,根据返回值,我们将简单判断登录是否成功。 进入MainPage.xaml.cs中,建立GetUser方法。该代码中EndpointAddress是最重要的,出现没有发现远程服务器错误,和这里设置也有关系。在clIEnt_GetUserCompleted中,e.Result代表了数据库返回值。可以接受任何值,大家可以根据需要进行值类型转换。每次,用户点击登陆按钮,Silverlight客户端都会向服务器端请求验证,返回结果会在提示信息栏显示。 1 private voID GetUser()
2 {
3 EndpointAddress address = new EndpointAddress( new Uri(Application.Current.Host.source, " /SilverlightDBDemo.Web/DBService.svc " ));
4 DBServiceClIEnt clIEnt = new DBServiceClIEnt( new BasichttpBinding(), address);
5 clIEnt.GetUserCompleted += clIEnt_GetUserCompleted;
6 clIEnt.GetUserAsync(txtUsername.Text, pbPassword.Password);
7 }
8
9 private voID clIEnt_GetUserCompleted( object sender, GetUserCompletedEventArgs e)
10 {
11 try
12 {
13 if (e.Result)
14 {
15 tbMessage.Text = " 登录成功! " ;
16 }
17 else
18 {
19 tbMessage.Text = " 登录失败! " ;
20 }
21 }
22 catch (Exception error)
23 {
24 tbMessage.Text = error.ToString();
25 }
26 }
27
28 private voID btLogin_Click( object sender, RoutedEventArgs e)
29 {
30 GetUser();
31 } 登录成功如下图: 到这里为止,我想你已经学会了如何使用WCF存取MSsql数据库了。如果有问题,可以留言给我,或者到Silverlight开发QQ群100844510来讨论。 代码下载 本文为原创文章,第一次发布在 银光中国网( SilverlightChina.Net) 如需转载,请注明出处,谢谢。 总结
以上是内存溢出为你收集整理的图文详解Silverlight访问MSSQL数据库全部内容,希望文章能够帮你解决图文详解Silverlight访问MSSQL数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)