代码改变世界

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),弹出页面如下:

点击“获取数据”按钮,显示如下:

                               大功告成!!!