• [转]Silverlight使用LINQ、WCF访问SQL视图多表操作


     配置

    SQL2005

    Silverlight3.0

    VS2008 sp1

    2 数据库

    建立数据库db_silverlight

    建立表tb_student和tb_score

    create table tb_student(
    stu_id 
    int primary key,
    stu_name 
    varchar(10not null,
    stu_number 
    varchar(10not null,
    stu_address 
    varchar(50not 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)
    );

    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;

    3 录入数据

    代码
    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);

    4 建立一个linq_to_sql_datagrid的silverlight应用程序

    5 创建Linq to sql数据库模型类

     

    视图sil_view拖入到资源管理器中,利用视图进行数据显示

    命名空间

    6 建立WCF Service数据通信服务

    不是而是

    Service.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>();
            }
        }
    }

    7 在linq_wfp_datagrid建立服务引用

    8 MainPage.xaml

    <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>

    9 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;
            }
        }
    }

    10 运行效果:

    11 总结

    11.1 如果想调整DataGrid的列宽

    DataGridColumn.Width 是 DataGridLength 类型,在 Silverlight 3.0 中只有:
    absolutePixelValue
    绝对列宽的正数值。
    Auto
    启用 Auto 调整大小的文本字符串值,可同时根据单元格和列标题的内容调整 DataGrid 列的大小。
    SizeToCells
    启用 SizeToCells 调整大小的文本字符串值,可根据列中单元格的内容(不包括列标题)调整 DataGrid 列的大小。
    SizeToHeader
    启用 SizeToHeader 调整大小的文本字符串值,仅根据列标题的内容调整 DataGrid 列的大小。

    11.2 一个没有索引的视图其实只是一个虚拟表,没有任何物理的数据,它就是一段代码组成的东西,包含了描述它的元数据,如结构,依赖性等.
    a. 它可以对基础数据做些聚合之类的操作后提供使用.
    b.它可以筛选数据,让客户只能访问视图以达到保护原表的目的.
    c.同样,视图不能包含单独的ORDER BY .因为它被认为是一个表,表是逻辑实体,本身里面的数据时随便放的,并米有刻意按照某个顺序存储数据.

    故在一定程度上可以定性的进行Silverlight与SQL多表操作;

    如果不是嵌套性读取,在效率方面影响是很小的,一般情况下视图会提高数据库的操作效率,也为软件的形成提供了一个很好的可视化数据表。

    11.3 基本的实现方式

    • 数据库实现
    • Data SQL层实现(Linq)
    • Web Service层实现
    • Silverlight客户端实现

      11.4 Silverlight与WCF、Linq、Database的关系

      11.5 Linq的基本架构

      LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。

      LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询操作符集,更重要的是,第三方操作符可以用它们自己的提供附加服务的实现来自由地替换标准查询操作符,根据LINQ模式的习俗,这些查询喜欢采用与标准查询操作符相同的语言集成和工具支持。

      Linq的命名空间:

    • LINQ包括五个部分:LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML。
    • LINQ to XML在System.Xml.LINQ命名空间下实现对XML的操作。采用高效、易用、内存中的XML工具在宿主编程语言中提供 XPath/XQuery功能等。

      11.6 相关参考资料

      视图

      http://blog.csdn.net/feixianxxx/archive/2009/11/11/4798287.aspx

      Linq简介

      http://www.cnblogs.com/lyj/archive/2008/01/20/1046196.html

      Silverlight访问数据库之Linq to Sql篇

      http://silverlightchina.net/html/tips/2009/1210/382.html

  • 相关阅读:
    C#之纯数字判断
    C#之仿魔兽登录
    jQuery考试之错题分析
    初学jQuery之jQuery虚假购物车-------与真实数据无关
    Jquery中绑定事件的异同
    总结java基础
    初学jQuery之jQuery事件与动画
    初学jQuery之jQuery选择器
    JavaScript 实现复制到剪贴板的总结
    IE和其他浏览器的表现差异:盒子间的空隙,图片变形,justify-content无效
  • 原文地址:https://www.cnblogs.com/iwaitu/p/1962085.html
Copyright © 2020-2023  润新知