zoukankan      html  css  js  c++  java
  • Ado.net DataSet 与delphi的一些技巧(web service)

    在微软中国找到了一个官方的说法------不建议将DataSet直接作为返回值传送,因为里面含有大量复杂的schema以及更改等信息,大部分非.NET语言在解析上有困难。建议使用DataSet.WriteXML方法将简化后的XML版本作为一个WideString回传。经过试验,已经在Delphi下轻松通过,Delphi中还需要使用XML Mapper工具事先生成Transfomation(XTR)文件。

    来自: xujh, 时间: 2004-07-04 11:30:02, ID: 2694891

    Delphi7客户端代码
    -----------------------------------------------------------------------
    unit WSTestMain;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, InvokeRegistry, StdCtrls, Rio, SOAPHTTPClient, Grids, DBGrids,
     DB, DBClient, DBTables, Provider, xmldom, Xmlxform,XMLIntf,XMLDoc,SOAPConst;

    type
     TForm1 = class(TForm)
       HTTPRIO1: THTTPRIO;
       Button1: TButton;
       Memo1: TMemo;
       XMLTransformProvider1: TXMLTransformProvider;
       ClientDataSet1: TClientDataSet;
       DataSource1: TDataSource;
       DBGrid1: TDBGrid;
       procedure Button1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    uses WSTestDefine;

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var
     A:Service1Soap;
     B:WideString;
     XMLDoc: IXMLDocument;
    begin
     A := HTTPRIO1 as Service1Soap;
     B := A.GetPersonTable;
     Memo1.Lines.Add( B );
     ClientDataset1.Active := FALSE;
     XMLDoc := NewXMLDocument;
     XMLDoc.Encoding := SUTF8;
     XMLDoc.LoadFromXML(B);
     XMLTransformProvider1.TransformRead.SourceXmlDocument := XMLDoc.GetDOMDocument;
     ClientDataset1.Active := TRUE;
    end;

    end.

    -----------------------------------------------------------------

    来自: xujh, 时间: 2004-07-04 11:30:28, ID: 2694892

    .NET WebService代码
    ---------------------------------------------------------------------------------------
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Web;
    using System.Web.Services;
    using System.Data.OracleClient;
    using System.IO;
    namespace WS0622
    {
    /// <summary>
    /// Service1 的摘要说明。
    /// </summary>
    public class Service1 : System.Web.Services.WebService
    {
     public Service1()
     {
      //CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的
      InitializeComponent();
     }

     #region 组件设计器生成的代码
     
     //Web 服务设计器所必需的
     private IContainer components = null;
       
     /// <summary>
     /// 设计器支持所需的方法 - 不要使用代码编辑器修改
     /// 此方法的内容。
     /// </summary>
     private void InitializeComponent()
     {

     }

     /// <summary>
     /// 清理所有正在使用的资源。
     /// </summary>
     protected override void Dispose( bool disposing )
     {
      if(disposing && components != null)
      {
       components.Dispose();
      }
      base.Dispose(disposing);  
     }
     
     #endregion

     // WEB 服务示例
     // HelloWorld() 示例服务返回字符串 Hello World
     // 若要生成,请取消注释下列行,然后保存并生成项目
     // 若要测试此 Web 服务,请按 F5 键

     [Serializable]
      public class Person
     {
      public Person()
      {
      }

      public Person(string name,string gender)
      {
       this.Name=name;
       this.Gender=gender;
      }

      public string Name="";
      public string Gender="";
     }
     [WebMethod(CacheDuration=60)]
     public Person[] GetPersons()
     {
      Person Alice=new Person("Alice","Female");
      Person Bob=new Person("Bob","Male");
      Person Chris=new Person("Chris","Female");
      Person Dennis=new Person("Dennis","Male");

      return new Person[]{Alice,Bob,Chris,Dennis};
     }

     [WebMethod]
     public string GetPersonTable()
     {
      DataTable table=new DataTable("Person");  
      table.Columns.Add("Name");
      table.Columns.Add("Gender");
      table.Rows.Add(new string[2]{"Alice","Female"});
      table.Rows.Add(new string[2]{"Bob","Male"});
      table.Rows.Add(new string[2]{"Chris","Female"});
      table.Rows.Add(new string[2]{"Dennis","Male"});
      table.Rows.Add(new string[2]{"Eric","Male"});

      DataSet dataset=new DataSet("PersonTable");
      dataset.Tables.Add(table);

      System.Text.StringBuilder strbuilder=new System.Text.StringBuilder();
      StringWriter writer=new StringWriter(strbuilder);
      dataset.WriteXml(writer,System.Data.XmlWriteMode.IgnoreSchema);

      return strbuilder.ToString();
     }


    }
    }

  • 相关阅读:
    MongoDb
    Android中的Parcelable接口和Serializable使用方法和差别
    8.Swift教程翻译系列——控制流之条件
    Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!
    漫谈机器学习经典算法—人工神经网络
    题目1191:矩阵最大值
    HTML中select的option设置selected="selected"无效的解决方式
    HorizontalListView中使用notifyDataSetChanged()和notifyDataSetInvalidated()
    获取Filter的三种途径
    规模化敏捷开发的10个最佳实践(上)
  • 原文地址:https://www.cnblogs.com/fuyingke/p/438765.html
Copyright © 2011-2022 走看看