动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 软件工程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 软件工程 ]的信息

本月文章推荐
.用Robot实现自动化测试.
.详细设计说明书.
.Apache APR可移植运行库简介(1).
.H.264中多参考帧预测技术的优化.
.本地化测试错误特征分析与测试方.
.语音识别在家电遥控器中的应用.
.在应用程序中集成 Windows 实时通.
.用XML、XQuery和本机XML数据库技.
.质量管理新七种工具简介(1).
.构建安全的.NET系统.
.利用GDI+的双缓冲技术来提高绘图.
.Visual Studio.net Beta2安装.
.随需而变 SOA将成集成主流.
.需求分析的20条法则.
..NET泛型技巧之打造可复用的抽象.
.探究需求管理的本质(1).
.Are U Sure.
.软件项目管理中的风险管理研究.
.模式和框架简介.
.“6 Sigma”品质管理的研究.

ADOCE与ADO.NET的差异

发表日期:2008-3-23 |



  你是一个需要将自己的知识和代码从PC移植到Pocket PC上的ADO开发人员吗?我将通过一些代码实例来向您展示ADO和ADOCE之间的相似和不同之处。
  本文需要:

  · Microsoft? eMbedded Visual Tools.

  · Microsoft SQL Server 2000 Developer Edition.

  · SQL Server 2000 Windows? CE Edition.

  · Microsoft ADOCE (ActiveX? Data Objects CE) 3.1 included with SQL Server 2000 Windows CE Edition.

  · To try the server-side examples, you need Microsoft Visual Studio? and ADO 2.6.

  Gotchas

  因为在CreateObject声明中有一处内存漏洞,所以你最好在你的程序中只创建ADOCE对象一次。在实例代码中,我将CreateObject的调用放到了每一个事件过程中,但是那只是为了比较ADO代码。

  数据访问

  大部分企业应用程序都是以数据为中心的,这意味着你需要知道如何储存信息。我的爱好是存储数据,当Pocket PC上使用的是真正的数据库——SQL Server 2000 Windows CE Edition。因此,我的第一个建议是得到你所需要的一个SQL Server 2000 Developer Edition的许可。

  当你安装了SQL Server 2000 Windows CE Edition后,你将同时得到ADOCE 3.1,最新的版本。我将用它和PC上最新版的ADO 2.6进行比较。

  主要差异

  好了,让我们来首先大概地看一下重要的差别。下面是一个ADOCE不支持的ADO功能列表:

  · Command and Parameter objects

  · Collection objects

  · Property object

  · Recordset persistence (Recordset.Save)

  · Asynchronous queries

  · Disconnected Recordsets

  · Dynamic creation of Recordsets

  · Multiple queries (Recordset.NextRecordset)

  对于我来说,没有的Recordset persistence意味着我不能将结果集存成Extensible Markup Language (XML)来供Pocket PC上的其他程序来调用。也许更重要的是,我不能将XML数据存入我的结果集中了。这造成了我需要进行从服务器组件中到Pocket PC上的数据转化或者相反——我也需要一些转化。我的建议是看一下Odyssey Software提供了什么。他们的Cefusion和ViaXML产品在这里都是有用的。假如你在寻找更长远(读Microsoft .NET)的方法来转换数据,你应该看一下pocketSOAP。

  无论如何,大多数重要的功能在ADOCE中被实现了。现在我们来看一下在相同的数据访问环境中的一些差异。
读取数据

  让我们用最常见的设想来开始——当你需要从一个数据存储中得到一些信息。在PC上,填写ListView控件的数据获取代码将会这么写:

Dim litm As ListItem
Dim laco As Connection
Dim lars As Recordset
Dim lsSQL As String

' Add column headers
lvwArticles.ColumnHeaders.Add , , "Description", 2500
lvwArticles.ColumnHeaders.Add , , "Price", 600, lvwColumnRight
lvwArticles.ColumnHeaders.Add , , "Stock", 600, lvwColumnRight

' Create objects
Set laco = CreateObject("ADODB.Connection")
Set lars = CreateObject("ADODB.Recordset")

' Open Connection
laco.Open "Provider=SQLOLEDB;Data Source=SERVERNAME;" & _
"Initial Catalog=DBNAME;Trusted_Connection=Yes"

' Open Recordset
lsSQL = "SELECT * FROM Article"
lars.Open lsSQL, laco, adOpenForwardOnly, adLockReadOnly

' Clear list and get item rows
Do While Not lars.EOF
Set litm = lvwArticles.ListItems.Add(, , lars("Description").Value)
litm.SubItems(1) = lars("Price").Value
litm.SubItems(2) = lars("Stock").Value
lars.MoveNext
Loop

' Close Recordset and Connection
lars.Close
laco.Close
  你在Pocket PC上将这样做:


Dim litm As ListItem
Dim laco As Connection
Dim lars As Recordset
Dim lsSQL As String

' Add column headers
lvwArticles.ColumnHeaders.Add , , "Description", 2500
lvwArticles.ColumnHeaders.Add , , "Price", 600, lvwColumnRight
lvwArticles.ColumnHeaders.Add , , "Stock", 600, lvwColumnRight

' Create objects
Set laco = CreateObject("ADOCE.Connection.3.1")
Set lars = CreateObject("ADOCE.Recordset.3.1")

' Open Connection
laco.Open "Provider=Microsoft.SQLSERVER.OLEDB.CE.1.0;" & _
"Data Source=\DBNAME.sdf"

' Open Recordset
lsSQL = "SELECT * FROM Article"
lars.Open lsSQL, laco, adOpenForwardOnly, adLockReadOnly

' Clear list and get item rows
Do While Not lars.EOF
Set litm = lvwArticles.ListItems.Add(, , lars("Description").Value)
litm.SubItems(1) = lars("Price").Value
litm.SubItems(2) = lars("Stock").Value
lars.MoveNext
Loop

' Close Recordset and Connection
lars.Close
laco.Close

  正如你看到的,在两个例子中有一些较小的差别。比较明显的是Connection对象的Open方法的连接字符串不同。假如你忽略Provider参数,ADOCE将假设你想访问一个Pocket Access数据库文件。而SQL Server CE始终是作为一个文件名被引用。这种情况下,文件将被放置到设备的根目录下,但是也可以被放置在你的应用程序目录中(例如,Data Source=\Program Files\AppName\AppName.sdf)。

  结论

  (a)所有的数据访问代码几乎不需要修改就可以被使用并且

  (b)大多数你的PC程序数据访问代码得到数据,你会熟悉到将你PC应用程序移植到Pocket PC上不需要巨大的努力。
更新数据

  现在,让我们看一下另外一个假设——当我们需要添加一些信息到数据存储。我将使用和数据获取相同的代码来打开和关闭Connection和 Recordset对象。在PC上你将写类似的代码:

' Open Recordset
lsSQL = "SELECT * FROM Article"
lars.Open lsSQL, laco, adOpenDynamic, adLockOptimistic

' Add new Article
lars.AddNew
lars("Description").Value = "Test"
lars("Price").Value = 50
lars("Stock").Value = 100
lars.Update
而在Pocket PC上你将看到这样的代码:

' Open Recordset
lsTable = "Article"
lars.Open lsTable, laco, adOpenDynamic, adLockOptimistic, _
adCmdTableDirect

' Add new Article
lars.AddNew
lars("Description").Value = "Test"
lars("Price").Value = 50
lars("Stock").Value = 100
lars.Update
  正如你看到的,不同之处在于你打开Recordset的方法。作为更新,Recordset作为一个表被打开比作为一个SQL声明(SELECT)更好。你也许在PC上(ADO)做的很好,但是这一点大概是你将代码从PC移植到Pocket PC上时不得不改变的。

  让我们来看一个更新的状况。这是PC上的代码:

' Open Recordset
lsSQL = "SELECT * FROM Article WHERE Description='Test'"
lars.Open lsSQL, laco, adOpenDynamic, adLockOptimistic

' Update Article
If Not lars.EOF Then
lars("Price").Value = 200
lars.Update
End If
这是Pocket PC上的:

' Open Recordset
lsTable = "Article"
lars.Open lsTable, laco, adOpenDynamic, adLockOptimistic, _
adCmdTableDirect
lars.Find "Description='Test'"

' Update Article
If Not lars.EOF Then
lars("Price").Value = 200
lars.Update
End If
  像在PC上一样用SQL声明(SELECT)来创建一个可更新Recordset是不可能的,你可以使用Find方法得到Recordset中想要的位置。

  假如你像加强一些性能,你可以用一个"raw" SQL UPDATE statement来做相同的事情:

laco.Execute "UPDATE Article SET Price=200 WHERE Description='Test'"

为了完善设想,我们来看一下如何删除数据。在PC上,代码是这样的:


' Open Recordset
lsSQL = "SELECT * FROM Article WHERE Description='Test'"
lars.Open lsSQL, laco, adOpenDynamic, adLockOptimistic

' Delete Article
If Not lars.EOF Then lars.Delete
Pocket PC上相应的代码:

' Open Recordset
lsTable = "Article"
lars.Open lsTable, laco, adOpenDynamic, adLockOptimistic, _
adCmdTableDirect
lars.Find "Description='Test'"

' Delete Article
If Not lars.EOF Then lars.Delete
  这里和更新的代码非常像。请注重Find方法的结果集是一个只包含与搜索标准相匹配记录的Recordset。这意味着你在PC和Pocket PC中会得到相同内容的Recordset。我说这个,是为了防止你想对Pocket PC上的Recordset做更多的事情,因为你打开了相同的表。

  此外,你可以用一个SQL DELETE语句来做几乎相同的事情:

  laco.Execute "DELETE Article WHERE Description='Test'"

  我说“几乎”,是因为最后的Execute将会删除所有与查询条件匹配的记录,但是上面的只会删除第一条出现的记录。在实际的情况中,搜索比较也许会被设定为唯一的键来产生出相同的结果。

  完整的例子,请看例子的代码。

  结束

  你已经知道了大多数关于PC上的ADO可以被用在你的Pocket PC上的事情,即使一些事情的处理方式略有不同。同样,在写Pocket PC程序时,大部分数据访问代码都可以通过一些改动应用到你的程序中去。

  你今天为什么不开始将一个PC上的企业级程序移植到Pocket PC上去?马上开始,然后向别人展示——这将是你下一个工程。
上一篇:用.Net开发DB2应用程序比较 人气:413
下一篇:数据库设计说明书 人气:2323
浏览全部软件工程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号