Mobile与PC机通过RDA同步

来源:互联网 发布:c语言求整数的绝对值 编辑:程序博客网 时间:2024/06/06 04:39
   Mobile与PC机通过RDA同步

刚开始弄mobile系统,走了不少弯路,希望对入门者有帮助.上述软件过大,不便上传,有需要或者上面表述有不明白的,欢迎交流:307483267

RDA简介(引用)
------------
Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile) 中的
远程数据访问 (RDA) 允许应用程序从远程 SQL Server 数据库表中访问数据,
并将数据存储到本地 SQL Server Mobile 数据库表中。
随后,应用程序可以读取和更新本地 SQL Server Mobile 数据库表。
SQL Server Mobile 可以选择跟踪对本地表所做的所有更改。
稍后,应用程序可以将本地表中更改的记录更新回 SQL Server 表中。

在 SQL Server Mobile 中,
从 SQL Server 表向本地 SQL Server Mobile 表传播数据称为请求数据。
将本地 SQL Server Mobile 表中所做的更改传播回 SQL Server 表称为推送数据。

应用程序还可以使用 RDA 来提交 SQL 语句,
在远程 SQL Server 数据库上执行。
例如,应用程序可以提交 SQL 语句,向 SQL Server 表中插入、更新或删除记录。
应用程序可以调用任何不返回记录集的 SQL 语句,包括远程系统上的存储过程。

当无需 SQL Server Mobile 合并复制的完整功能(例如解决冲突)时,RDA 较为适用。

 

一、             需要准备的环境:

 

A.  PC机上面必须具备的环境

1、  VS2005(或其他开发工具)

2、  Mobile6.0 SDK

3、  SQL SERVER2000(SP4)

4、  SQLCE 2.0 及其补丁sqlce20sql2ksp4.exe

5、  IIS组件

6、  PDA同步软件Microsoft ActiveSync

备注:

我的机器安装了sqlserver 2000 及其 sp4补丁,所以我需要安装的是sqlce2.0及对应的sqlce20sql2ksp4.exe.

 

B.  Mobile终端机上面必须具备的环境

1、  sqlce20.dev.ppc.wce4.armv4.CAB

2、  sqlce20.ppc.wce4.armv4.CAB

 

备注:

安装好sqlce2.0之后会在C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v2.0  产生一个文件wce400,将此文件中两执行文件(即上面的两CAB文件)在MOBILE系统中执行,也即此文件是MOBILE系统必须安装的用于RDA的客户端及查询工具。

 

二、             实现步骤

1、  安装好sqlce2.0及sqlce20sql2ksp4.exe,运行其附带的Configure Connectivity Support in IIS创建IIS虚拟目录sqlce,其指向的实际本地路径为:C:\Program Files\Microsoft SQL Server CE 2.0\Server\   (选择匿名访问,并接受IIS的默认来宾用户,一般以IUSR开头,在存取权限中需要选中读取和目录浏览两项);

2、  检测SQL Server CE Server Agent工作是否正常,启动IE,在地址栏中输入 http://192.168.1.50/sqlce/sscesa20.dll   (浏览器返回“SQL Server CE Server Agent”说明SQL Server CE Server Agent运行正常,IIS配置正确。)

3、  在SQL Server 2000创建数据库TestTb,并建立一个测试表Degree,填充若干数据。

4、  在VS2005中创建一个Device Application,在Form上面添加两个按钮:

      [新建数据库]---在MOBILE终端上面新建数据库[MyDb#2.sdf]

      //创建数据库

        public void CreatDba()

        {

            //创建数据库

            try

            {

                if (File.Exists("data source=" + Path.GetDirectoryName(Assembly.Load(Assembly.GetExecutingAssembly().GetName()).GetName().CodeBase) + @"/MyDb#2.sdf" + ";Password=123456"))

                {

                    MessageBox.Show("数据库已经存在");

 

                }

                else

                {

                    SqlCeEngine eng = new SqlCeEngine("data source=" + Path.GetDirectoryName(Assembly.Load(Assembly.GetExecutingAssembly().GetName()).GetName().CodeBase) + @"/MyDb#2.sdf" + ";Password=123456");

                    eng.CreateDatabase();

                    eng.Dispose();

                    MessageBox.Show("创建数据库成功");

 

 

                }

                Boolean rtu;

                rtu = CreateTable();

                if (rtu == false)

                {

                    MessageBox.Show("数据表已经存在!");

 

                }

                else

                {

                    MessageBox.Show("创建数据表成功!");

 

                }

 

            }

            catch (Exception ex)

            {

                MessageBox.Show("创建数据库失败" + ex.ToString().Substring(1, 60));

 

            }

        }

 

        //创建数据库的表

        private Boolean CreateTable()

        {

            try

            {

                SqlCeConnection myconn = new SqlCeConnection("data source=" + Path.GetDirectoryName(Assembly.Load(Assembly.GetExecutingAssembly().GetName()).GetName().CodeBase) + @"/MyDb#2.sdf" + ";Password=123456");

                SqlCeCommand com = new SqlCeCommand("create table PC (PCNO NVarChar(10) primary key,XH NVarChar(10) NOT NULL,WERKS NVarChar(4) NOT NULL,PC_DATE NVarChar(10))");

                myconn.Open();

                com.Connection = myconn;

                com.ExecuteNonQuery();

                myconn.Close();

                MessageBox.Show("创建数据库成功!");

                return true;

            }

            catch (Exception ex)

            {

                MessageBox.Show("创建数据库失败" + ex.ToString().Substring(1, 60));

                return false;

            }

 

        }

      [下载数据]----从PC机的SQL SERVER 2000的TestTb库中下载数据到[MyDb#2.sdf]                     库中

      private void button2_Click(object sender, EventArgs e)

        {

            try

            {

                string rdaOleDbConnectString = "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=TestTb;Data Source=PC-201007151145";

 

                //string rdaOleDbConnectString = @"Provider=sqloledb;Data Source=192.168.1.50;" + "Initial Catalog=SQLMobile;User Id=sa;Password=sa;";

                SqlCeRemoteDataAccess rda = null;

                rda = new SqlCeRemoteDataAccess();

                //MessageBox.Show(rdaOleDbConnectString);

                rda.InternetLogin = "";

                rda.InternetPassword = "";

                rda.InternetUrl = "http://192.168.1.50/sqlce/sscesa20.dll";

                //rda.LocalConnectionString = @"Provider=Microsoft.SQLSERVER.OLEDB.CE.2.0;Data Source=\mysdf.sdf";

                rda.LocalConnectionString = "data source=" + Path.GetDirectoryName(Assembly.Load(Assembly.GetExecutingAssembly().GetName()).GetName().CodeBase) + @"/MyDb#2.sdf" + ";Password=123456";

                //rda.LocalConnectionString = @"Data Source=\'mysdf.sdf';Password='123456'";

 

                rda.Pull(

                    "Degree",

                    "Select * from Degree",

                    rdaOleDbConnectString);

                MessageBox.Show("数据下载成功");

            }

            catch

            { }

        }

5、  部署应用程序到MOBILE终端,这时需要将MOBILE终端连接到PC机,并运行Microsoft ActiveSync进行连接。

6、  部署成功后运行程序,首先新建数据库,然后下载数据。

 

 

 

原创粉丝点击