标题: webcast(.Net Compact Framework 数据访问技术杂谈)学习笔记
- JustDI 2008-03-24 10:51 阅读:216
- 评论:0 | 添加评论
前言:
      关于window移动应用开发的网络资源很多,webcast就是其中很好的学习资料,微软免费开放这些教程目的就是为了让我们这些刚刚入门的初学者能够更迅速地跨过这个门槛,当然门槛后面还有更丰富的内容有待我们去探索。关于windows mobile的webcast很多,粗略数了下不包括最近新出的有将接近百个,如果按照两天一个视频的速度的话,也得小半年才能看得完,但我们不可能老耗在这个上面,我们还有我们的工作,所以如何去筛选这些资源成为一件很重要的事,一般我们都是根据自己的需求应用去学习。希望这篇文章能对你筛选这些资源带来一点帮助。

讲    师:张欣 
时    间:  90分钟
下载地址:下载(需先注册,不过非常快)

讲座内容:

      本课程通过对Windows Mobile 程序中使用.NET Compact Framework 来访问本地数据和远端数据的各种技术进行对比,分析比较它们的特性和优缺点,帮助您分析选择适合您的应用的数据访问技术。主要内容包含: ADO.NET, XML, SQL Mobile, Web service, Http Request, SQL Server。

学习笔记:

        这个webcast主要内容是介绍使用.NET Compact Framework访问本地数据还远端数据的一些技术,因为是介绍性的,所以内容都相对来说很浅,并没有讲如何深入地实现。不过教程对于理解在windows mobile智能设备中如何访问数据及进行操作数据能带来很大的帮助,对于初学者来说是一个不错的教程。
      一、本地数据访问技术
         (1)ADO.NET
            ADO.NET与我们平时见到的不是精简框架的ADO.NET的模型差不多,依然是Connection,Command,DataAdapter,DataReader四个对象,ADO.NET模型中,存储数据的对象是DataSet,存在于内存中.在Compact Framework中ADO.NET依然是访问数据的一种重要手段。
         (2)SQL Mobile(以前叫SQL CE)
          SQL Mobile的特点是(纯介绍性的):
           1.支持DDL和DML
           2. 支持大量SQL函数
           3.  支持嵌套事务
           4.支持和SQL SERVER交互(通过RDA和合并复制)
这里贴出一张从webcast上截下来的SQL Mobile的模型图,从图中可以看得出来Sql Mobile与服务器数据进行交互是同过Http与IIS进行交互来着.
[图片]
 Sql Mobile编程与ADO.NET类似,首先也是建立连接
[图片]SqlConnection = "Data Source=My Documents\\Northwind.sdf";
  获取数据:
[图片]SqlCeDataAdapter myAdapter=new SqlCeDataAdapter();
[图片]myAdapter.TableMappings.Add("Table","Titles");
[图片]cn.Open();
[图片]SqlCeCommand myCommand=new SqlCeCommand
[图片]("SELECT * FROM Titles",cn);
[图片]myCommand.CommandType=CommandType.Text;
[图片]myAdapter.SelectCommand=myCommand;
[图片]DataSet ds=new DataSet();
[图片]myAdapter.Fill(ds);
参数化的查询:
[图片]SQL = "INSERT INTO Titles (TitleID,TitleName)
[图片]VALUES (?,?)";
[图片]cmd.CommandText = SQL;
[图片]cmd.Parameters.Add("@TitleID",
[图片]System.Data.SqlDbType.NChar, 5);
[图片]cmd.Parameters.Add("@TitleName",
[图片]System.Data.SqlDbType.NVarChar, 40);
[图片]cmd.Parameters["@TitleID"].Value = "MSCF1";
[图片]cmd.Parameters["@TitleName"].Value = "Compact
[图片]Framework";
[图片]cmd.ExecuteNonQuery();
(3)XML
     主要是使用XMLDocument对象来访问数据,可使用两种方式加载,第一种方式是使用Load方法加载:
[图片]XMLDocument doc=new XMlDocument();
[图片]doc.Load("Test.xml");
     第二种方法是使用LoadXml方法加载
[图片]XMLDocument doc=new XMLDocument();
[图片]doc.LoadXML("<item><name>wrench</name></item>")
     使用XMLDocument对象绑定数据可以用两种方法,第一种方法是遍历查找子节点
[图片]XMLNote root=doc.FirstChild;
[图片]for(int i=0;i<root.ChildNodes.Count;i++)
[图片][图片][图片]{
[图片]   YourMethod(root.ChildNotes[i])
[图片]}
     第二种是通过XPath表达式直接找到所需要的子节点(.NET CF 2.0新特性)
[图片]XMLNote root=doc.FirstChild();
[图片]XMLNote node=root.SelectSingleNote("XPathExpression");
[图片]XMLNoteList nodeList=root.SelectNotes("XPathExpression");
XMLDocument对象中处理子节点和处理属性的方法很多,如AppendChild、InsertAfter、GetAttribute、SetAttribute等方法来处理属性。
     二、访问远端数据
     (1)使用webservice
        使用webservice的方式访问数据是我比较熟悉的一种方式,可能是因为一直做.NET下的B/S开发,对webservice情有独钟,使用webservice访问远端数据的方法很简单,只需四个步骤:
      1.开发webservice;
      2.将webservice部署到IIS上去;
      3.项目中添加webservice的引用;
      4.调用webservice中的方法.
    (2)使用Http Request
        这种方式远程访问数据我接触的比较少,感觉比较稀奇,以下代码做了详细的注释
[图片][图片]HttpRequest
[图片]  string strImageURL = "http://zhubaobao/help.gif";
[图片]            try
[图片][图片]            [图片]{
[图片]                //打开一个HttpRequest请求获取请求的回应
[图片]                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)
[图片]System.Net.WebRequest.Create(strImageURL);
[图片]                System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse();
[图片]
[图片]                // 新建一个文件用于我们写入服务器返回的数据
[图片]                System.IO.FileStream logoFile = new System.IO.FileStream(@"\Windows\AskDotNetPocketLogo.gif",
[图片]                    System.IO.FileMode.Create);
[图片]
[图片]                // 实例化一个writer对象
[图片]                System.IO.BinaryWriter fileStream = new System.IO.BinaryWriter(logoFile);
[图片]
[图片]                //为服务器返回的数据实例化一个Reader对象
[图片]                System.IO.BinaryReader picStream = new System.IO.BinaryReader(resp.GetResponseStream());
[图片]                try
[图片][图片]                [图片]{
[图片]                    // 循环读取Reader中的每一个字节
[图片]                    //  当Reader中没数据时抛出一个异常
[图片]                    while (true)
[图片]                        fileStream.Write(picStream.ReadByte());
[图片]                }
[图片][图片]                catch [图片]{ }
[图片]
[图片]                //关闭文件流
[图片]                logoFile.Close();
[图片]
[图片]                // 新建一个BitMap对象,并初始化为刚开始新建的文件
[图片]                System.Drawing.Bitmap logoImage = new
[图片]                    System.Drawing.Bitmap(@"\Windows\AskDotNetPocketLogo.gif");
[图片]                pbShowImage.Image = logoImage;
[图片]            }
[图片]            catch (Exception exp)
[图片][图片]            [图片]{
[图片]                //捕获异常
[图片]                MessageBox.Show(exp.Message);
[图片]            }
(3)使用SqlServer
        在我看来SqlServer在mobile中的应用是与SqlMobile中的数据进行同步,可以存储大量的数据,它的主要应用还是在和SqlMobile的合并复制与RDA,当然了,通过webservice访问数据时可以避开SqlMobile。
最后来点总结性的文字:
    (访问本地数据)
方式
优点  缺点 
 ADO.NET  可以很方便的和其他数据访问技术相结合;便于访问关系型数据库 过于臃肿
Sql Mobile
便于存储关系型数据;便于和SQL Server相结合;大数据量下效率较高.
需要在设备上部署Sql Mobile
XML
存储灵活;便于和其他程序交互;便于存储非关系型数据
使用XMLDocument处理大数据时效率较低;
使用XMLReader/XML Writer开发较麻烦
    (访问远端数据)
方式 优点
缺点
Web Service
可以很方便地访问其他已有系统;便于部署;便于系统的分层设计;
在客户端较多的情况下不利于数据状态的管理;
实时性较差;
Http Request
利用标准的网络协议,便于访问异构系统;便于部署
解析复杂的的html数据源较麻烦;
SqlServer
便于和SqlMobile进行同步;
便于使用服务器端丰富的功能;
便于存储大量数据;
直接访问SQL SERVER时不利于系统的分层设计;需要持久化连接;
源码下载


添加评论
返回顶部 | 返回首页