Silverlight使用Ling、WCF访问SQL视图多表操作(参考)
2013-04-10 15:18 Keiven_LY 阅读(371) 评论(0) 编辑 收藏 举报参考网址链接:
http://www.soaspx.com/dotnet/silverlight/silverlight_20100608_4675.html
1.1 项目创建步骤
1、建立本地数据库
2、Data SQL实现(Linq)
3、WCF服务(Web Service层的实现)
4、Silverlight客户端的实现
1.2 建立本地数据库,取名为:Students_DB
第一步:打开SQL2005,右键 数据库——>新建数据库(N),在数据库名称(N)中写Students_DB,点击“确定”,这样本地数据库Students_DB建立完成。
第二步:在本地数据库Students_DB中建立新表tb_student和tb_score
方法:数据库——>Students_DB,右键点击“新建查询”。表的创建代码:
create table tb_student( stu_id int primary key, stu_name varchar(10) not null, stu_number varchar(10) not null, stu_address varchar(50) not null); create table tb_score( stu_id int primary key, sco_math smallint not null, sco_english smallint not null, sco_chinese smallint not null, foreign key (stu_id) references tb_student(stu_id) );
第三步:创建视图sil_view,将新创建的两张表联系起来
方法:数据库——>Students_DB,右键点击“新建查询”。视图的创建代码:
create view sil_view as select A.stu_id,A.stu_name,A.stu_number,A.stu_address,B.sco_math,B.sco_english,B.sco_chinese from tb_student A,tb_score B where A.stu_id=B.stu_id;
第四步:向两张表中录入数据
方法:数据库——>Students_DB,右键点击“新建查询”。代码:
insert into tb_student values(1,'李小露','01','广东省'); insert into tb_score values(1,97,98,82); insert into tb_student values(2,'陈守','02','甘肃省'); insert into tb_score values(2,87,93,85); insert into tb_student values(3,'卢大招','03','辽宁省'); insert into tb_score values(3,97,92,81); insert into tb_student values(4,'刘方','04','浙江省'); insert into tb_score values(4,77,78,76); insert into tb_student values(5,'周成','05','江苏省'); insert into tb_score values(5,97,99,99); insert into tb_student values(6,'庄小芳','06','黑龙江'); insert into tb_score values(6,69,90,75); insert into tb_student values(7,'张建国','07','广西省'); insert into tb_score values(7,67,98,94); insert into tb_student values(8,'艾青','08','江西省'); insert into tb_score values(8,92,91,78); insert into tb_student values(9,'郑成','09','河北省'); insert into tb_score values(9,69,79,93); insert into tb_student values(10,'萧条','10','西藏'); insert into tb_score values(10,94,90,89); insert into tb_student values(11,'钟涯','11','四川省'); insert into tb_score values(11,97,88,82); insert into tb_student values(12,'马云','12','陕西省'); insert into tb_score values(12,96,98,70); insert into tb_student values(13,'杨海亮','13','内蒙古'); insert into tb_score values(13,93,98,80); insert into tb_student values(14,'林森路','14','山东省'); insert into tb_score values(14,97,93,60); insert into tb_student values(15,'邱余云','15','山西省'); insert into tb_score values(15,91,98,89); insert into tb_student values(16,'苏小云','16','湖南省'); insert into tb_score values(16,69,100,79);
1.3 创建一个名为linq_wfp_datagrid的Silverlight应用程序
生成的解决方案资源管理器如下图所示:
1.4 创建 Linq to sql 数据库模型类
方法:在解决方案中,右键ling_wfp_datagrid.Web——>添加——>新建项,选择LINQ to SQL类,默认名称DataClasses1.dbml,此时解决方案变为:
1.5 拖入视图sil_view到资源管理器中
目的:利用视图进行数据显示
方法:在选项卡DataClasses1.dbml下,点击蓝色的“服务器资源管理器”,在服务器资源管理器中,右键“数据连接”——>添加连接(A),出现“添加连接”选项卡,如下
在“服务器名(E)”的下拉菜单中,选择“XZ-20110526OXIN\SQLEXPRESS”(注:这里要将“\SQLEXPRESS”删掉,变为只剩下机器名XZ-20110526OXIN);在“选择或输入一个数据库名(D)”的下拉菜单中,选择“Students_DB”,点击“测试连接”,当弹框显示“测试连接成功”后,点击“确定”按钮,再一次点击“确定”按钮。这样在服务器资源管理器中就加入了我们新建的数据库Students_DB。
然后展开数据库Students_DB——>视图,点击“sil_view”,拖动到界面中,结果如下:
1.6 命名空间的填写
方法:选中选项卡DataClasses1.dbml,在右下角看到“属性”的编辑框,
在“上下文命名空间”一栏键入:sil_content
在“实体命名空间”一栏键入:sil_entity
1.7 建立 WCF Service 数据通信服务
方法:在解决方案中,右键ling_wfp_datagrid.Web——>添加——>新建项
选择“启用Silverlight功能的WCF服务”,名称选择默认的Service1.svc即可(名称也可以修改,我自己没改),点击“添加”按钮,解决方案资源管理器变为:
1.8 编写Service1.svc.cs中的代码,红色部分为自己添加部分
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Collections.Generic;
using System.Text;
using sil_content;//引用命名空间,使可以使用 DataClasses1DataContext
using sil_entity;//引用命名空间,使可以使用sil_view 表
namespace linq_wfp_datagrid.Web
{
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1
{
[OperationContract]
public void DoWork()
{
// 在此处添加操作实现
return;
}
// 在此处添加更多操作并使用 [OperationContract] 标记它们
[OperationContract]
public List<sil_view> Get_Data()
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var query = from q in dc.sil_view
select q;
return query.ToList<sil_view>();
}
}
}
到此时,保存,生成项目,启动调试(ctrl+F5)
1.9 在 linq_wfp_datagrid 建立服务引用(相当于客户端)
方法:在解决方案中,右键ling_wfp_datagrid——>添加服务引用(S),出现“添加服务引用”对话框,如下:
点击“发现”,地址栏中会出现我们刚刚启动的服务地址,点击“确定”按钮即可。
1.10 编辑MainPage.xaml中的代码
首先在解决方案资源管理器中的ling_wfp_datagrid的下,右键引用——>添加引用(R),选择System.Windows.Controls和System.Windows.Controls.Data两项。
这部分代码如下,绿色部分为自己添加
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="linq_wfp_datagrid.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="200"/>
<RowDefinition Height="35"/>
</Grid.RowDefinitions>
<data:DataGrid x:Name="mydatagrid" Grid.Row="0" AutoGenerateColumns="False" ColumnWidth="100" Width="720">
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="编号" Binding="{Binding stu_id}" IsReadOnly="True"/>
<data:DataGridTextColumn Header="姓名" Binding="{Binding stu_name}" IsReadOnly="True"/>
<data:DataGridTextColumn Header="学号" Binding="{Binding stu_number}" IsReadOnly="True"/>
<data:DataGridTextColumn Header="地址" Binding="{Binding stu_address}" IsReadOnly="True"/>
<data:DataGridTextColumn Header="数学" Binding="{Binding sco_math}" IsReadOnly="True"/>
<data:DataGridTextColumn Header="英语" Binding="{Binding sco_english}" IsReadOnly="True"/>
<data:DataGridTextColumn Header="语文" Binding="{Binding sco_chinese}" IsReadOnly="True"/>
</data:DataGrid.Columns>
</data:DataGrid>
<Button x:Name="button" Click="button_Click" Grid.Row="1" Content="获取数据" Width="100"></Button>
</Grid>
</UserControl>
1.11 编辑MainPage.xaml.cs中的代码
注:绿色部分为自己添加部分
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using linq_wfp_datagrid.ServiceReference1;//添加服务引用
namespace linq_wfp_datagrid
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.button.Click += new RoutedEventHandler(button_Click);
}
private void button_Click(object sender, RoutedEventArgs e)
{
Service1Client webclient = new Service1Client();
webclient.Get_DataCompleted += new EventHandler<Get_DataCompletedEventArgs>(webclient_Get_DataCompleted);
//调用 Get_Data 的方法
webclient.Get_DataAsync();
}
private void webclient_Get_DataCompleted(object sender, Get_DataCompletedEventArgs e)
{
List<sil_view> stu = new List<sil_view>(e.Result);
mydatagrid.ItemsSource = stu;
}
}
}
1.12 运行情况
保存项目,重新生成解决方案,启动调试(ctrl+F5),弹出页面如下:
点击“获取数据”按钮,显示如下:
大功告成!!!