65.9K
CodeProject 正在变化。 阅读更多。
Home

Silverlight 3.0 中的基本数据库操作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (9投票s)

2009年11月24日

CPOL

4分钟阅读

viewsIcon

65260

downloadIcon

3343

此处涵盖了 Silverlight 3.0 版本中的所有基本数据库操作。

CRUD 操作

数据是任何编程概念中的重要因素。数据库操作是任何编程语言中的关键项。通常,所有数据库操作可大致分为四类:

  1. 插入数据(创建)
  2. 获取现有数据(读取)
  3. 修改现有数据(更新)
  4. 删除数据(删除)

这组任务称为 CRUD。通过设计这四种操作,程序员将能够很好地了解如何开始构建与数据库存储连接的应用程序。

LINQ 概述

.NET Framework 3.5 引入了一个新概念,称为 LINQ(语言集成查询)。在当前面向对象编程范例中,LINQ 通过生成数据类形式的关系数据库,降低了访问和集成来自数据源的信息的复杂性。语言集成查询允许查询表达式受益于丰富的元数据、编译时语法检查和静态类型。最重要的是,IntelliSense 功能对开发人员社区更有益。语言集成查询还允许将一个通用的声明式查询工具应用于所有内存中的信息,而不仅仅是来自外部来源的信息。

在典型的 6 层应用程序架构模型中,LINQ 位于业务逻辑和实际数据库源之间,作为开发社区的简化集成器。它定义了一组通用的标准查询运算符,允许以直接而声明式的方式在任何基于 .NET 的编程语言中表达遍历、筛选和投影操作。

案例研究

基于上述 LINQ 和 CRUD 操作知识,让我们使用 LINQ 构建一个 Silverlight 3.0 Web 应用程序。作为案例研究,我们将考虑 SQL Server 表“EmployeeMaster”中的数据库操作。我们将尝试以下两种方法:

  • LINQ to SQL
  • 存储过程

我们的案例研究应用程序按照以下模型设计:

对于我们所有的数据库操作案例研究,Employee 表的结构如下:

LINQ to SQL

以下各节将逐步介绍如何构建 LINQ to SQL 实现。

步骤 1:创建新的 Silverlight 应用程序

步骤 2:在 MainPage.xaml 中创建四个超链接按钮

步骤 3:创建 WCF 服务

通过右键单击“SilverlightBasicDBApp.Web”服务器端项目,从下面的列表中添加一个名为“DBService”的新 WCF 服务。

要从客户端/用户界面层访问新创建的服务,将添加 Web 服务引用,如下所示:

步骤 4:创建 LINQ to SQL 类

要创建 LINQ to SQL 类,请右键单击客户端解决方案。从菜单中选择“添加新项”选项,将弹出以下屏幕以添加新的 LINQ to SQL 类,EmpMasterDataClass.dbml

从“服务器资源管理器”子窗口中,右键单击“数据连接”以添加一个新条目。在此操作期间,将显示“添加连接”窗口以连接到选定的数据源。

单击“测试连接”按钮后,我们可以验证所请求数据源的数据库连接状态。操作成功后,将像下面的快照一样包含新的“数据连接”条目。展开“表”树结构,将 EmpMaster 拖放到 EmpMasterDataClass.dbml 中。

步骤 5:读取操作

在 CRUD 操作中,让我们从 EmpMaster 表的读取操作开始。首先,需要添加一个新的 WCF 服务,如下所示:

在接口 IBDService 中添加新服务
[OperationContract]
List<EmpMaster> ReadEmpMaster(string EmpId);
在 DBService 中实现它
List<EmpMaster> IDBService.ReadEmpMaster(string EmpId)
{
    EmpMasterDataClassDataContext dbConn = new EmpMasterDataClassDataContext();
    var queryRead = from table in dbConn.EmpMasters
                    where table.EmpId.ToString().StartsWith(EmpId)
                    select table;
    return queryRead.ToList();
}
用户界面

用户界面 (UI) 屏幕旨在获取给定条件的结果记录。通过文本框读取输入的员工 ID;“读取”Button 控件调用 Web 服务方法以从定义的数据源中获取匹配的记录。

<StackPanel x:Name="ContentStackPanel">
    <Grid.
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="300">
            <ColumnDefinition Width="100">
            <ColumnDefinition Width="100">
        </Grid.ColumnDefinitions>

    <TextBlock x:Name="HeaderText" 
          Style="{StaticResource HeaderTextStyle}" 
          Text="Enter Employee ID to retrieve like">
    <TextBox Grid.Column="1" x:Name="txtEmpId" 
          Height="25" Width="70"<
    <Button Grid.Column="2" x:Name="btnRead" 
        Width="50" Height="25" 
        Click="btnRead_Click" Content="Fetch It">
    </Grid>
    <grid:DataGrid x:Name="gridTeam" 
        AlternatingRowBackground="Beige" CanUserSortColumns="True" 
        Width="Auto" AutoGeneratingColumn="gridTeam_AutoGeneratingColumn">
</StackPanel>
用户界面代码隐藏

UI 代码隐藏编写在按钮 UI 控件的 btnRead_Click 委托中。

private void btnRead_Click(object sender, RoutedEventArgs e)
{
    DBServiceRef.DBServiceClient webService = 
       new SilverlightBasicDBApp.DBServiceRef.DBServiceClient();
    webService.ReadEmpMasterCompleted += 
      new EventHandler<SilverlightBasicDBApp.DBServiceRef.ReadEmpMasterCompletedEventArgs>
      (webService_ReadEmpMasterCompleted);
    webService.ReadEmpMasterAsync(txtEmpId.Text.Trim());
}

void webService_ReadEmpMasterCompleted(object sender, 
     SilverlightBasicDBApp.DBServiceRef.ReadEmpMasterCompletedEventArgs e)
{
    if (e.Result.Count > 0)
    {
        PagedCollectionView groupView = new PagedCollectionView(e.Result);
        if (groupView.CanGroup)
        {
            groupView.GroupDescriptions.Add(new PropertyGroupDescription("Status"));
        }
        gridTeam.ItemsSource = groupView;
    }
}
执行应用程序的读取操作

创建、删除、更新操作

类似地,通过重复步骤 5 和 6 来执行其他三个数据库操作。编程顺序如下:

  • 在接口 IBDService 中添加新服务
  • 在 DBService 中实现它
  • 更新服务引用
  • 用户界面
  • 用户界面代码隐藏

存储过程

要使用存储过程方法执行相同的读取操作,前三个步骤将相同。在步骤 4 中,相同的功能定义在存储过程(pr_EmpMaster)中,该存储过程从左侧的“数据连接”树中拖动。

步骤 5:读取操作

拖动 pr_EmpMaster 后,将在服务器解决方案中创建自动生成的相关或连接类(例如 pr_EmpMasterResult)。参照生成的类,让我们通过以下步骤继续使用存储过程进行数据库操作。

在接口 IBDService 中添加新服务
[OperationContract]
List<EmpMaster> prReadEmpMaster(string EmpId);
在 DBService 中实现它
List<pr_EmpMasterResult> IDBService.prReadEmpMaster(string EmpId)
{
  EmpMasterDataClassDataContext dbConn = new EmpMasterDataClassDataContext();
  return (dbConn.pr_EmpMaster(EmpId)).ToList();
}
用户界面

重用之前的模型。

用户界面代码隐藏
webService.prReadEmpMasterCompleted += 
  new EventHandler<SilverlightBasicDBApp.DBServiceRef.prReadEmpMasterCompletedEventArgs>
  (webService_prReadEmpMasterCompleted);
webService.prReadEmpMasterAsync(txtEmpId.Text.Trim());

步骤 6:执行应用程序的读取存储过程操作

历史

  • 版本 1.0 - 初始版本。<!------------------------------- 就是这样! --------------------------->
© . All rights reserved.