详解Silverlight访问SQL数据库Word格式.docx
- 文档编号:21978338
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:16
- 大小:331.46KB
详解Silverlight访问SQL数据库Word格式.docx
《详解Silverlight访问SQL数据库Word格式.docx》由会员分享,可在线阅读,更多相关《详解Silverlight访问SQL数据库Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
cUserName
=
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()]
public
class
:
INotifyPropertyChanged
{
#region
Members
event
PropertyChangedEventHandler
PropertyChanged;
11.
#endregion
12.
}
13.}
5.在Users类中,添加契约成员
1.private
string
userName;
2.[DataMember()]
3.public
UserName
4.{
get
return
set
userName
value;
7.}
9.private
password;
10.[DataMember()]
11.public
Password
12.{
13.
14.
password
15.}
6.建立构造函数publicUsers(stringsUserName,stringsPassword),传递用户名和密码给契约成员;
1.using
System;
2.using
System.ComponentModel;
3.using
System.Runtime.Serialization;
5.namespace
6.{
private
[DataMember()]
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Users(string
sUserName,string
sPassword)
27.
28.
sUserName;
29.
sPassword;
30.
31.
32.
33.
34.
35.
36.
37.
38.}
7.添加"
Silverlight-enabledWCFService"
,修改服务名字为DBService.svc,需要注意的是,WCFservice对于Silverlight仅支持BasicHttpBinding,而VS2008自动生成是customBinding,很多朋友说使用了"
,链接数据库仍旧失败,无法找到远程服务器,是因为没有使用BasicHttpBinding进行通讯,造成的失败。
后文我将讲述如何修改。
8.添加后,在Web服务器端会有DBService.svc和DBService.svc.cs文件出现,VS2008将自动更新Web项目的类库引用;
9.双击进入DBService.svc.cs文件,可以看到以下代码:
System.Linq;
4.using
System.ServiceModel;
5.using
System.ServiceModel.Activation;
6.using
System.Collections.Generic;
7.using
System.Text;
9.namespace
10.{
[ServiceContract(Namespace
"
)]
[AspNetCompatibilityRequirements(RequirementsMode
AspNetCompatibilityRequirementsMode.Allowed)]
DBService
[OperationContract]
void
DoWork()
//
Add
your
operation
implementation
here
return;
more
operations
and
mark
them
with
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通过WCFservice进行通讯,而VS2008自动生成的代码是customBinding,所以,我们也需要在Web.Config中进行修改.下面是VS2008自动生成的Web.Config部分代码,划线部分是下面要修改的部分。
system.serviceModel>
2.
<
behaviors>
serviceBehaviors>
behavior
name="
SilverlightDBDemo.Web.DBServiceBehavior"
>
serviceMetadata
httpGetEnabled="
true"
serviceDebug
includeExceptionDetailInFaults="
False"
/behavior>
/serviceBehaviors>
/behaviors>
bindings>
customBinding>
binding
customBinding0"
binaryMessageEncoding
httpTransport
/binding>
/customBinding>
/bindings>
serviceHostingEnvironment
aspNetCompatibilityEnabled="
services>
service
behaviorConfiguration="
SilverlightDBDemo.Web.DBService"
endpoint
address="
binding="
customBinding"
bindingConfiguration="
contract="
mex"
mexHttpBinding"
IMetadataExchange"
/service>
/services>
27.<
/system.serviceModel>
这里我们需要修改以下几个地方:
首先删除customBinding,从上面代码,第10行,到17行,使用下面代码替换:
basicHttpBinding>
BasicHttpBinding_IDataService"
maxBufferPoolSize="
2147483647"
maxReceivedMessageSize="
maxBufferSize="
readerQuotas
maxArrayLength="
maxBytesPerRead="
maxDepth="
maxNameTableCharCount="
maxStringContentLength="
/basicHttpBinding>
15.<
其中那些2147483647之类的属性可以删除,但是如果读取数据库中的大型表格,就需要设置缓冲池之类的尺寸了。
这里,我们已经使用了basicHttpBinding.Bindingname我使用了BasicHttpBinding_DBService,大家可以随意更换,下面将用到。
然后修改22行和23行的代码,将endpoint中的binding,内容修改为basicHttpBinding,bindingConfiguration的内容修改为BasicHttpBinding_DBService。
basicHttpBinding"
BasicHttpBinding_DBService"
12.现在我们可以在DBService.svc.cs中添加存取数据库代码,对用户名和密码进行简单匹配,这里不再着重讲述如何条件匹配登录信息。
这里演示了如何调用数据库存储过程。
完成存取数据库代码后,成功编译Web项目。
代码有点长,这里折叠起来。
connectionString
WebConfigurationManager.AppSettings["
];
3.[OperationContract]
4.public
bool
GetUser(string
cPassword)
5.{
SqlConnection
conn
new
SqlConnection(connectionString);
SqlCommand
cmd
SqlCommand("
Login"
conn);
cmd.CommandType
CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("
@UserName"
cUserName);
try
conn.Open();
SqlDataReader
reader
cmd.ExecuteReader(CommandBehavior.SingleRow);
if
(reader.Read())
user
Users((string)reader["
cUserName"
],
(string)reader["
cPassword"
]);
(user.Password
==
true;
else
false;
finally
conn.Close();
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中的内容相同。
这里我们不需要修改任何代码。
configuration>
security
mode="
None"
transport>
extendedProtectionPolicy
policyEnforcement="
Never"
/transport>
/security>
client>
http:
//localhost/SilverlightDBDemo.Web/DBService.svc"
DBService.DBService"
/client>
21.<
/configuration>
18.下面我们将在客户端调用该服务引用,获取数据库的返回值,根据返回值,我们将简单判断登录是否成功。
进入MainPage.xaml.cs中,建立GetUser方法。
该代码中EndpointAddress是最重要的,出现没有发现远程服务器错误,和这里设置也有关系。
在client_GetUserCompleted中,e.Result代表了数据库返回值。
可以接受任何值,大家可以根据需要进行值类型转换。
每次,用户点击登陆按钮,Silverlig
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 详解 Silverlight 访问 SQL 数据库