程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 學習使用ADO.NET Data Services (ADO.NET 數據服務框架) - Part2

學習使用ADO.NET Data Services (ADO.NET 數據服務框架) - Part2

編輯:關於.NET

ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的擴充功能,這個功能和概念 在以前的.NET 1.0-.NET3.5 技術中都沒有出現的新概念,它主要用途是可以很容易的將數據庫服務公開 在網絡上,然後透過URL網址就可以對數據庫進行CRUD的操作。ADO.NET Data Services能通過一個REST化 的方式將數據以Web上的數據服務展示。使得應用可以以數據服務的方式展現數據,然後被應用在企業網 絡和互聯網上的Web客戶端中。

本文演示如何創建ADO.NET Data Services,及如何創建客戶端並調用Data Services。

上一篇文章:

學習使用ADO.NET Data Services (ADO.NET 數據服務框架) - Part 1

創建一個簡單的客戶端程序

前面的操作幾乎都沒有寫任何代碼,可以理解的是,將IE 浏覽器作為客戶端來訪問service並不方便 。這裡,我們編寫一個簡單的客戶端程序來訪問subtext_content 博客隨筆表,並修改數據,然後提交給 service。

第一步是配置service,允許查詢並更新 subtext_content 數據表。

    public static void InitializeService(IDataServiceConfiguration config)
    {
      // TODO: 設置規則以指明哪些實體集和服務操作是可見的、可更新的,等等。
      // 示例:
      config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
      config.SetEntitySetAccessRule("Subtext_Content", EntitySetRights.All);
    }

下面創建一個Windows Form – Client 端應用程序:

接下來為該client 端應用程序添加Service引用,在彈出的窗口中輸入:

http://localhost:31948/SubtextData.svc/

端口號為實際的Service端口號,可能和本實例不同。

一旦增加Service引用後,Client端應用程序將自動生成client-side的代理proxy繼承 DataServiceContext和必要的實體。同時,也添加了對System.Data.Services.Client 的引用,該命名空 間有DataServiceContext 對象需要的客戶端的框架。

另外,使用IQueryable 數據源暴露數據服務的優勢是你可以在客戶端使用LINQ to entities,框架負 責轉換為HTTP請求。例如,在IE 浏覽器中,如果你想僅僅返回2條評論信息,你可以在IE 浏覽器地址欄 輸入:

http://localhost:31948/SubtextData.svc/subtext_Content(10)/subtext_FeedBack?$top=2

在Client端應用程序中,我們可以寫LINQ查詢data service。下面,我們返回EntLib.com 作者寫的所 有博客隨筆:

    private Uri serviceURI = new Uri("http://localhost:31948/SubtextData.svc/");
  
    public Form1()
    {
      InitializeComponent();
    }
  
    private void Form1_Load(object sender, EventArgs e)
    {
      SubtextDataEntities ctx = new SubtextDataEntities(serviceURI);
  
      var contents = from c in ctx.subtext_Content
              where c.Author == "EntLib.com"
                select c;
  
      foreach (subtext_Content c in contents)
      {
        Console.WriteLine(c.EntryName);
      }
  
      grdSubtext.DataSource = contents.ToList();
    }

通過ADO.NET Data Service 更新數據

為了更新數據庫,我們通知DataServiceContext 更新了對象,接著通過調用SaveChanges方法傳入更 新的數據到Server端。

    private void btnUpdate_Click(object sender, EventArgs e)
    {
      SubtextDataEntities ctx = new SubtextDataEntities(serviceURI);
  
      var content = (from c in ctx.subtext_Content
              where c.Author == "EntLib.com"
                select c).FirstOrDefault();
  
      if (content != null)
      {
        content.Title = "Welcome to http://forum.entlib.com";
        ctx.UpdateObject(content);
  
        try
        {
          ctx.SaveChanges();
          MessageBox.Show("Saved title");
        }
        catch (Exception ex)
        {
          MessageBox.Show(ex.ToString());
        }
      }
    }

Client端程序運行界面如下:

本文配套源碼:http://www.bianceng.net/dotnet/201212/742.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved