MyGeneration学习笔记(5) :在Web Service中使用dOOdad(中)
我看了一下dOOdad的源码和生成的代码,发现实体类中有提供ToXml和FromXml方法,实现了字符串到Datatable的转换,于是决定试下用字符串来保存DataTable信息,然后再在网络中传输字符串,这就是我的原始思想。
在Web Service中使用dOOdad(上),将FromDataSet/ToDataSet改成FromXml/ToXml,返回值/参数改成string,即可实现以字符串作为返回值,下面以插入一条记录为例:
public bool Insert(string str)
{
bool wasSaved = false;
try
{
Employees emps = new Employees();
emps.FromXml(str);
emps.Save();
wasSaved = true;
}
catch { }
return wasSaved;
}
但这样又引发了新的问题:ToXml后的字符串丢失了DataTable中的部分重要信息,如DataSet的Schema、DataRow的状态(Added/Modified/Deleted)、没有赋值的属性等。所以在服务器端从字符串中取得数据Load进业务实体后,还得一些额外的操作,于是我尝试了下面两种方法,且都可以通过测试:
方法1 :new一个新业务实体,将数据拷贝到新实体中:
Web服务端代码:
public bool Insert(string str)
{
Employee emps = new Employee();
emps.FromXml(str);
Employee temp = new Employee();
temp.AddNew();
temps.FirstName = emps.FirstName;
temps.LastName = emps.LastName;
…… //其他字段的赋值
temp.Save();
int id = temp.ID;
}
调用WebService的客户端代码:
emps.FristName = "Happy";
temps.LastName = "Hippy";
…… //其他字段的赋值
Serivce1 webservice = new Service1();
webservice.Insert(emps.Toxml());
这种方法也不是很好,服务器端要从字符串中解析出数据并new一个新对象,再将数据拷贝到新对象中。麻烦,不爽。于是,我又尝试了下面的方法。
方法2 :为业务实体找回丢失的部分重要信息
讲解这种方法之前,先解释一下emps.Save的原理,该Method内部,判断DataRow的状态(Added、Modified、Deleted)并根据状态执行相应的插入/更新/删除操作。
事实上,执行emps.FromXml之后,DataRow的状态为Added(可以用RowState()进行测试),所以理论上是可以执行Save()来直接进行插入操作,而不用new一个新对象;然而如方法1中所说,emps.ToXml获得的字符串丢失了部分信息--emps对象的那些没有赋值的属性都丢失了,所以像ID这种在客户端没有赋值的属性,在xml中也没有它相应的标签(<tag>).
客户端将业务实体Toxml转换成string,传给服务器端,服务器端的代码:
public Insert(string str)
{
//客户端没有对ID进行赋值
Employee emps = new Employee();
emps.FromXml(str);
//在这里访问emps.ID会出错:ID不是School中的列。
emps.Save();//出错(同上)。
}
出现上述注释中的问题的原因是ID列的信息丢失了,这时我们可以手动添加ID列,示例代码如下:
public Insert(string str)
{
Emplyee emps = new Employee()
emps.AddColumn("ID",typeof(int));
emps.AddColumn……//其他没有赋值的属性
emps.Save(); //终于可以成功地写入数据库了^_^
}
客户端代码同法1中一样,不再赘述。
最后再补充一点:因为AddNew()方法是从数据库中检索架构的,而在调用WebService的客户端,是不能通过这种方式来创建DataTable的,所以要在ConcreteClass中加一个方法来重写AddNew()方法:
{
this.DataTable = new DataTable();
this.AddColumn(Employee.ColumnNames.ID, typeof(int));
this.AddColumn(Employee.ColumnName.FirstName,typeof(string));
………………
base.AddNew();
}
本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2006/08/23/601237.html,如需转载请自行联系原作者
MyGeneration学习笔记(5) :在Web Service中使用dOOdad(中)相关推荐
- 【分布计算环境学习笔记】9 Web Service
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.概述: 在现有的各种异构平台的基础上,构筑一个通用的,与应用无关.语言无关的技术层,各种不同平台之上的应用依 ...
- Android学习笔记:Android基础知识点(不断更新中)
1.Android学习笔记:OkHttp 2.Android学习笔记:更新UI的方法(UI线程和非UI线程) 3.Android学习笔记:Volley 4.Android学习笔记:Handler 5. ...
- MyGeneration学习笔记(10) :配置数据库连接
在我的<MyGeneration学习笔记(1) : 使用MyGeneration生成存储过程和数据访问层代码 >一文中,我提到用internal string _raw = Project ...
- PHP学习笔记-PHP与Web页面的交互2
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51761308 本文出自:[顾林海的博客] 前言 在<PHP学习笔 ...
- Tomcat学习笔记01【Web相关概念、Tomcat基本操作】
Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...
- Web Components 学习笔记一: Web Components是什么?解决了什么问题?
公众号:妙蛙种子前端 文章原文地址:Web Components笔记一: Web Components是什么?解决了什么问题? | 妙蛙种子 - 记录WEB前端技术学习成长过程的博客 Web Comp ...
- 「学习笔记」移动Web开发之flex布局9
「学习笔记」移动Web开发之flex布局9 一.flex布局体验 1.1 传统布局与flex布局 1.2 初体验 二.flex布局原理 2.1 布局原理 三.flex布局父项常见属性 3.1 常见父项 ...
- 「学习笔记」移动Web开发之rem适配布局10
「学习笔记」移动Web开发之rem适配布局10 一.rem单位 1.1 rem 单位 二.媒体查询 2.1 什么是媒体查询 2.2 语法规范 2.2.1 mediatype 查询类型 2.2.2 关键 ...
- oracle修改asm参数文件,学习笔记:Oracle RAC参数文件管理 修改创建asm中的spfile文件...
天萃荷净 Oracle rac创建修改asm中的spfile文件内容 create spfile to asm --查看sid SQL> show parameter instance_name ...
- 用JQuery中的Ajax方法获取web service等后台程序中的方法
用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...
最新文章
- 某网络专业人士笔记(超级珍藏)
- ASP.NET MVC Routing、Areas、URLs
- ubuntu 13.04 设置Dash中显示Eclipse
- javascript要点
- 雇用Java EE开发人员的一些面试问题
- 微型计算机和pc的概念,微型计算机IBM-PC(0520)系统原理及应用
- Springboot 2.0选择HikariCP作为默认数据库连接池的五大理由
- sigprocmask, sigpending, sigsuspend的用法
- Java笔记(三)内部类,容器,泛型和类型安全的容器,迭代器
- wps office oa控件 痕迹_WPS加载项案例应用回顾
- 文件上传限制文件类型
- jquery复选框checkbox实现删除
- JS实现文字截取(雾)
- Gson解析数组和list容器
- 使用AJAX时出现“Microsoft JScript 运行时错误: 'Sys' 未定义”提示的解决方法
- scrapy_redis爬取统计局的城乡代码,以目录文件夹形式生成,同时最后保存在excel和redis数据库中
- transCAD求解两路径问题中遇到的问题和解决方法
- 计算机网络面试需要掌握的知识点汇总
- python ctype_Python中用ctype库
- 中断驱动的自行车码表
热门文章
- java 跳跃表_c++实现跳跃表(Skip List)的方法示例
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)
- 30-- A 代码记录分析
- 示范对外接口参数文档
- C#将运算字符串直接转换成表达式且计算结果
- /etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc(转载)
- 【Vegas原创】分别用Toad、EM解表锁
- QT的事件分发、事件过滤器详解
- C# 通过socket实现UDP 通信
- IOS的OC项目下回调函数的定义以及传参