Silverlight 2 (beta1)数据操作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD操作

目录

  • 导言
  • 软件需求
  • 在SQL 2005中创建数据库
  • 在Visual Studio 2008中创建Silverlight工程和ADO.NET Data Service
  • 创建一个XMLHttpRequestWrapper类
  • 在Silverlight中使用Astoria进行CRUD操作

导言

Silverlight 2支持JSON、Web Service、WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中进行数据库的CRUD操作方面的实战能力。

这篇文章介绍如何在Silverlight 2 beta 1中使用ADO.NET Data Service (Astoria)进行数据CRUD操作。

软件需求

在SQL 2005中创建数据库

创建一个名为User的表,如下图所示。我在前面一篇文章中详细介绍了,这一篇我们还需要这张表。

在Visual Studio 2008创建Silverlight工程和ADO.NET Data Service

1.创建Silverlight工程

第一步:在VS2008中创建一个新的Silverlight工程,命名为:YJingLee.Astoria

第二步:选择一个ASP.NET Web Site用来托管Silverlight应用程序

2.添加ADO.NET Entity Data Model新项

第一步:在ASP.NET工程上右击选择“Add New Item...”

第二步:选择“ADO.NET Entity Data Model”新项并单击“OK”按钮

第三步:在弹出的对话框,要求自动创建App_Code文件夹,单击确定

第四步:在Entity Data Model向导对话框中选择“General from database”并单击“Next”

第五步:接着选择连接字符串,如果当前没有连接,单击“New Connection...”创建一个新的连接,完成之后,选择在web.config文件中保存Entiy连接并修改名称。单击“Next”

第六步:选择表。我只选择了User表,其他的表,视图,存储过程并没有选定,单击“Finish”按钮

完成之后如下所示

3.添加ADO.NET Data Service新项

第一步:在ASP.NET工程中添加“ADO.NET Data Service”新项

第二步:修改代码。首先,需要为WebDataService服务设置data model class,我在这里设置如图。其次,设置一些操作。

这个文件最终代码如下:

public class WebDataService :
WebDataService<YJingLeeDBModel.YJingLeeDBEntities>
{
    public static void InitializeService
      (IWebDataServiceConfiguration config)
    {
        config.SetResourceContainerAccessRule(
            "*", ResourceContainerRights.All);
        config.SetServiceOperationAccessRule(
            "*", ServiceOperationRights.All);
    }
}

到这里,ASP.NET工程的相关操作就处理完了,最后设置一个固定端口号,我设置为“52600”,编译一下这个工程。

创建一个XMLHttpRequestWrapper类

在Silverlight工程中添加一个XMLHttpRequestWrapper类,这个类用于封装Javascript的XmlHttpRequest对象,如果你用过AJAX,就很熟悉这个对象。在这里,我只不过用C#把这个对象封装成了一个类。

public static class XMLHttpRequestWrapper
{
    static ScriptObject _xmlHttpRequest;
    public static string DoPost(Uri url, string httpVerb)
    {
        return DoPost(url, httpVerb, string.Empty);
    }
    public static string DoPost(Uri url, string httpVerb, string param)
    {
        _xmlHttpRequest = HtmlPage.Window.
            CreateInstance("XMLHttpRequest");
        _xmlHttpRequest.Invoke("open", httpVerb, url, false);
        _xmlHttpRequest.Invoke(
            "setRequestHeader", "Content-Type", "application/json");
        if (param == string.Empty)
        {
            _xmlHttpRequest.Invoke("send");
        }
        else
        {
            _xmlHttpRequest.Invoke("send", param);
        }
        ScriptObject dom = (ScriptObject)
                           _xmlHttpRequest.GetProperty("responseXML");
        return (string)dom.GetProperty("xml");
    }
}

在Silverlight中使用Astoria进行CRUD操作

创建完这个封装类,我们开始编写代码来使用Astoria进行CRUD操作。在这之前,我们先搞清楚ADO.NET Data Service是把数据以服务的形式公开,这样就可以通过浏览器来直接访问数据,每个HTTP动作用来完成数据类型不同。如POST、GET、PUT、DELETE,分别用于数据的创建、更新、删除和读取。

这一篇我为了方便,前台界面使用上一篇制作的程序界面。上一篇的代码已经提供下载。只需简单修改一下后台按钮事件代码就可以了。这里我为了模拟直接在事件中定义了一些属性,像userName和UserID来实现了,大家可以利用上一节的界面把这些属性动态绑定到前台控件上,像上一篇操作一样。

1.创建数据

我们插入新的数据,把数据作为JSON对象,使用POST方式提交给ADO.NET Data Service处理,服务器的URL使用硬编码方式。

void createButton_Click(object sender, RoutedEventArgs e)
{
  string userName = "YJingLee";
  string serviceURL ="http://localhost:52600/YJingLee.Astoria_Web/
       WebDataService.svc/User/";
  string jsonString = "{" + Environment.NewLine +
      "UserName:\"" + userName;
  jsonString += "\"" + Environment.NewLine + "}" + Environment.NewLine;
  XMLHttpRequestWrapper.DoPost(
      new Uri(serviceURL), "POST", jsonString);
}

2.读取数据

利用Astoria读取数据有两种方法,可以使用WebClient或者使用XmlHttpRequestWrapper类。

使用WebClient

string serviceURL ="http://localhost:52600/YJingLee.Astoria_Web/
                          WebDataService.svc/User/?$orderby=UserID";
string result = XMLHttpRequestWrapper.DoPost(
    new Uri(serviceURL), "GET");
DisplayUsers(result);

使用XmlHttpRequestWrapper

void retrieveButton_Click(object sender, RoutedEventArgs e)
{
    try
    {
        string serviceURL =
        "http://localhost:52600/YJingLee.Astoria_Web/
                 WebDataService.svc/User/?$orderby=UserID";
        WebClient astoriaService = new WebClient();
        astoriaService.DownloadStringCompleted +=
             new DownloadStringCompletedEventHandler
             (astoriaService_DownloadStringCompleted);
        astoriaService.DownloadStringAsync(new Uri(serviceURL));
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
void astoriaService_DownloadStringCompleted
           (object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Error == null)
    {
        DisplayUsers(e.Result);
    }
}

以下方法可以把查询出来的数据绑定到控件上。

private void DisplayUsers(string xmlContent)
{
  XDocument userdoc = XDocument.Parse(xmlContent);
  XNamespace xmlns = "http://www.w3.org/2005/Atom";
  XNamespace ads = "http://schemas.microsoft.com/ado/2007/08/dataweb";
  var users = from x in userdoc.Descendants(xmlns + "entry")
                select new User
                {
                    UserID = int.Parse(x.Descendants(ads + "UserID")
                                                   .First().Value),
                    UserName = x.Descendants(ads + "UserName")
                               .First().Value
                };
    userList.ItemsSource = users;
}

3.删除数据

删除记录需要在URL中指定用户ID,我在这里指定UserID为5的那个记录,通过HTTP DELETE请求提交给Astoria删除数据。

string serviceURL = "http://localhost:52600/YJingLee.Astoria_Web/
                    WebDataService.svc/User(5)/";
XMLHttpRequestWrapper.DoPost(new Uri(serviceURL), "DELETE");

至于更新记录好像在这里不方便,我暂时也不知道用什么方法。

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-11-05 13:45:26

Silverlight 2 (beta1)数据操作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD操作的相关文章

ADO.NET Data Service

关于ADO.NET Entity Framework部分的内容见ADO.NET Entity Framework(1-4) http://www.cnblogs.com/foundation/archive/2008/10/06/1304718.html 本文例子下载: http://files.cnblogs.com/wxwinter/lz.rar 目录 1    ADO.NET Data Service介绍    2 2    创建DataService项目    3 2.1    数据表 

Silverlight 2 (beta1)数据操作(2)——使用ASP.NET Web Service进行数据CRUD操作(下)

前台界面 后台代码 //按钮事件 void saveButton_Click(object sender, RoutedEventArgs e) { if (userName.Text.Trim() == string.Empty) { errMessage.Foreground = new SolidColorBrush(Colors.Red); errMessage.Text = "请输入用户名称!"; errMessage.Visibility = Visibility.Visi

Silverlight 2 (beta1)数据操作(5)——使用LINQ to SQL进行数据CRUD操作(上)

导言 Silverlight 2支持JSON.Web Service.WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中进行数据库的CRUD操作方面的实战能力. 这篇文章介绍如何在Silverlight 2 beta 1中使用LINQ to SQL进行数据CRUD操作.我把这个实例大致分为3层. 这里多说几句:微软发布的是Silverlight 2 beta1 并不是Silverlight 2.0,也

Silverlight 2 (beta1)数据操作(1)——使用ASP.NET Web Service进行数据CRUD操作(上)

目录 导言 软件需求 在SQL 2005中创建数据库 在Visual Studio 2008中创建 Silverlight 2 (beta1)工程 在ASP.NET工程里创建Web Service 在Silverlight 2 (beta1)工程中引用ASP.NET Web Service 添加数据部分 查询数据部分 修改数据部分 删除数据部分 整合程序 结语 例子下载 导言 Silverlight 2支持JSON.Web Service.WCF以及Sockets等新特性对数据CRUD操作,这个

Silverlight 2 (beta1)数据操作(6)——使用LINQ to SQL进行数据CRUD操作(下)

Silverlight客户端实现 这个部分主要完成Silverlight客户端的操作,首先引用WCF服务,然后在Page页面中,我们使用DataGrid控件来实现对数据的绑定,另外,添加一个用户控件实现增加.删除.修改操作处理.下面一步一步来实现这些步骤吧. 第一步:引用WCF服务 第二步:添加一个用户控件 第三步:编辑用户控件界面 为了演示方面,我没有做任何的界面美化,仅仅把数据库相应的字段在TextBox上实现双向绑定,即在任何时候都可以同时更新源数据和目标.提供了保存,删除,添加按钮实现数

ADO.NET笔记——使用DataAdapter执行增删改操作

相关知识: DataSet中的数据一旦从数据库下载下来,便不再与数据库保持联系.如果修改了DataSet中的数据,需要重新建立连接,并且通过SQL命令将修改更新到数据库去 编写SQL命令往往比较繁琐和机械化,ADO.NET提供了一个SqlCommandBuilder对象,帮助DataAdapter对象从SELECT语句推算出需要的UPDATE,DELETE和INSERT语句:然后DataAdapter便可以利用这些语句,检查DataSet中被修改的数据,然后提交到数据库 SqlCommandBu

WPF,Silverlight与XAML读书笔记第十五 - 页间导航 页间数据传递

?说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 导航 有关导航的话题在介绍NavigationWindow与Page等元素时有提及.这篇文章将详细分析导航相关话题.同其它话题,针对WPF,Silverlight与WP 7,导航特性大致相似又有着些许不同.在介绍此特性时相同的特性将合在一起,每个框架独有的特性也将独立介绍并有明显标识. 导航的功能及目的就是从一个页面转向另一个页面,可能是前进亦或是后

[翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 原文链接:https://msdn.microsoft.com/en-us/library/ms978388.aspx 概要:在典型的应用环境中,比较不同数据访问技术的表现性能.适用于Microsoft .NET Framework Beta2 和 Microsoft SQL Server 2000

NPOI操作excel——利用反射机制,NPOI读取excel数据准确映射到数据库字段

> 其实需求很明确,就是一大堆不一样的excel,每张excel对应数据库的一张表,我们需要提供用户上传excel,我们解析数据入库的功能实现. 那么,这就涉及到一个问题:我们可以读出excel的表头,但是怎么知道每个表头具体对应数据库里面的字段呢? 博主经过一段时间的思考与构思,想到一法:现在的情况是我们有excel表A,对应数据库表B,但是A与B具体属性字段的映射关系我们不知.那我们是不是可以有一个A到B的映射文件C呢? 我想,说到这,大家就很明了了... 第一步:为每张excel创建一个与