利用RDA实现SQL CE与SQL Server间数据存取

最近在做手持机的开发,想要实现手持机与计算机上的数据交互,手持机上的操作系统为Win CE6.0,计算机上的操作系统为Win XP SP3,计算机上安装了SQLSERVER 2000数据库,手持机上安装了 SQLCE 2.0数据库,想要利用 RDA(RemoteDataAccess远程数据存取)实现掌上电脑Pocket PC(简称PPC)上的SQL Server CE 2.0与桌面SQL Server 2000数据库间的数据存取。

 

一、软件安装过程如下:

1、在PC上安装SQLSERVER 2000+SP4补丁

首先在计算机上安装SQLSERVER 2000+SP4补丁,这个过程一般都不会出现什么问题,

如果在安装SP4补丁的过程中遇到补丁安装失败,XX文件无法访问的情况,建议将SQLSERVER 2000卸载掉重新安装。

       2、在PC上安装网站服务器IIS

       3、在PC上安装SQLCE 2.0,安装地址如下:

http://download.csdn.net/detail/snowinsky/4236599

主要是用的是SQLServer CE Server Agent ,SQLServer CE Server Agent 处理来自SQL Server CE Client Agent的Http请求。当SQLServer CE Client Agent通过Http协议向SQL Server CE Server Agent发送请求时,SQL Server CE Server Agent会与SQL Server进行连接并将查询的记录集通过Http协议再传回给SQLServer CE Client Agent,所有数据的传送都要依赖IIS来完成。

  由上述通信过程我们知道,SQL Server CE 的远程连接和存取需要使用Web传输协议Http 或者Https,SQL Server CE Client Agent必须运行在Windows CE设备上,SQL Server CE Server Agent则运行在桌面PC上,而且该计算机还必须安装有IIS以便使用RDA 或合并复制来和SQL Server通信。SQL Server CE 支持的网络连接有以太网、无线局域网和无线广域网。通过使用Microsoft ActiveSync,Pocket PC设备可以使用串口、红外线或者USB直接与桌面PC上的SQL Server连接,也可以进行SQL Server CE与桌面SQL Server 的连接测试。

  Remote Data Access (RDA)对象是Microsoft SQL Server 2000 Windows CE (SQLServer CE)用于可编程存取远程MicrosoftSQL Server 2000 或者Microsoft SQL Serverversion 7.0 数据库的ActiveX控件,我们可以使用RDA存取远程数据库就像是在桌面PC上操作本地数据库一样简单。

       安装完sqlce2.0之后需要安装sqlce  2.0的sp4补丁,下载地址如下:

http://download.csdn.net/detail/snowinsky/4236633

否则看不到configureconnectivity support in IIS.

 

装完这一步 会提示你设置 sqlserver ce 的网站 只需要你起个名字比如”ssce”,其余的默认即可 //网站设成匿名访问

打开IIS 就会看到 网站 “ssce ” 打开它, 里面有5个动态库,右健点击sscesa20.dll 出现菜单 ,点浏览 ie中出现”SQL ServerCE Server Agent” 说明服务已经启动

这时用.NET2003 就可以让 sqlserver2000 和 wince5.0 的sqlce 同步了,由于我用的是.NET2008和wince6.0,完成这一步之后在同步数据的时候报”访问数据库内部错误: 传消

息中的 HTTP 标头信息”,为了解决这个问题需要将sqlce2.0升级到3.0.

4.      安装Sqlce30setupcn.msi sqlserve 2000for ce 3.0的补丁1.6M,下载地址:

http://download.csdn.net/detail/snowinsky/4236655

这时需要手工设置 sqlce3.0 的网站 用iis新建一个网站 起个名字比如”ssce3”设置网站目录为你刚才安装Sqlce30setupcn 的目录//网站设成匿名访问

打开IIS 就会看到 网站 “ssce3 ” 打开它, 里面有1个动态库,右健点击sqlcesa30.dll 出现菜单 ,点浏览 ie中出现” MicrosoftSQL Server Compact Edition Server Agent” 说明服务已经启动

这时用.NET2008 就可以让 sqlserver2000 和wince6.0 的sqlce 同步了

5、如何在wince 6.0上安装sqlce数据库

你需要找几个文件:

 (1)sqlce.wce5.armv4i

 (2)sqlce.repl.wce5.armv4i

 (3)sqlce.dev.CHS.wce5.armv4i

这些文件在哪呢,搜索一下你的SQLServer安装目录。搜索了一下,在这里:C:\Program Files\Microsoft SQL Server CompactEdition\v3.5\Devices\wce500\armv4i

在WinCE设备(你的开发板)或者wince模拟器上按顺序安装以下cab形式的压缩包。

 (1)sqlce.wce5.armv4i

 (2)sqlce.repl.wce5.armv4i

 (3)sqlce.dev.CHS.wce5.armv4i

注意,一定要按顺序哦,不按顺序将会出现错误:无法找到 PInvoke DLL“sqlceme30.dll” 。

如果你装错了顺序,那也不要紧,重新把文件丢进去再按顺序安装一遍就可以了。

 

.新建一个智能设备项目:文件->新建->项目->选择“智能设备”。

建好工程后,把System.Data.SqlServerCe.dll添加到引用。

把dll都复制到工程的bin\Debug目录下,文件名如下(自己搜索你的电脑C盘把它们找出来):

Sqlceca35.dll,Sqlcecompact35.dll,Sqlceer35cn.dll,Sqlceme35.dll,Sqlceoledb35.dll

Sqlceqp35.dll,Sqlcese35.dll,System.data.sqlclient.dll,System.data.sqlserverce.dll

5.  下面是别人写的同步程序,我测试通过了

a. 再 pc sqlserver2000 下的pubs数据库下建表mytbce 三个字段(myid,  myname,   myage)定义成char类型

b. wince6.0下建库

private void button2_Click(object sender,System.EventArgs e)

{

SqlCeConnection conn = null;

if(File.Exists(@"/Temp/Test.sdf"))

{

MessageBox.Show("exists");

File.Delete(@"/Temp/Test.sdf");

}

SqlCeEngine engine = newSqlCeEngine(@"Data Source = /Temp/Test.sdf");

engine.CreateDatabase();

conn = new SqlCeConnection(@"DataSource = /Temp/Test.sdf");

conn.Open();

if(conn.State   ==  ConnectionState.Open)  

conn.Close();

}

c. pc 到pda 的数据库同步

private void button4_Click(object sender,System.EventArgs e)

{

string rdaOleDbConnectString ="Provider=sqloledb; Data Source='bxl';Initial Catalog=pubs; " +

"User Id=sa;Password =";//这是pc 上的sqlserver2000 下的

SqlCeRemoteDataAccess rda = null;

rda = new SqlCeRemoteDataAccess();

rda.InternetLogin = "";

rda.InternetPassword = "";

   rda.InternetUrl =@"http://bxl/ssce3/sqlcesa30.dll";

rda.LocalConnectionString = @"Data Source=/Temp/Test.sdf";//这是pda(wince)上的

rda.Pull("mytbce", "SELECT *FROM mytbce", rdaOleDbConnectString,

RdaTrackOption.TrackingOn,"ErrorTable");

//上面这一句是同步就是把pc上的表拷贝到pda上如果pda上有同名的表就会出错

MessageBox.Show("1");

rda.Dispose();

}

d.pda 上的数据插入

private void button3_Click(object sender,System.EventArgs e)

{

   DateTime fdate =System.DateTime.Now;

   string fstr =fdate.ToString();

i++;

Random ra = newRandom(unchecked((int)DateTime.Now.Ticks));

SqlCeConnection conn = null;

conn = new SqlCeConnection(@"Data Source= /Temp/Test.sdf");

conn.Open();

SqlCeCommand cmd = conn.CreateCommand();

cmd.CommandText = "INSERT  INTO   mytbce(myid,   myname,  myage)   VALUES   ('" + ra.Next(100000).ToString ()+"' , 'abc',   '"+fstr +"')";

MessageBox.Show (cmd.CommandText);

cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT  *   FROM   mytbce";

SqlCeDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())

{

MessageBox.Show("col1 = " +rdr.GetString(0) + "  col2 = " + rdr.GetString(1) +"   col3   = " + rdr.GetString(2));

}

if (conn.State == ConnectionState.Open)

conn.Close();

MessageBox.Show("close ok");

}

e.pda 到 pc sqlserver 的同步

private void button5_Click(object sender,System.EventArgs e)

{

  string rdaOleDbConnectString ="Provider=sqloledb; Data Source='bxl';Initial Catalog=pubs; " +"User Id=sa;Password =";

SqlCeRemoteDataAccess rda = null;

rda = new SqlCeRemoteDataAccess();

rda.InternetLogin = "";

rda.InternetPassword = "";

rda.InternetUrl = @"http://10.0.0.123/ssce3/sqlcesa30.dll";

rda.LocalConnectionString = @"DataSource=/Temp/Test.sdf";

 

rda.Push("mytbce",rdaOleDbConnectString, RdaBatchOption.BatchingOn);

rda.Dispose();

MessageBox.Show ("finally");

}

 

以上程序我在 winxp,.net2008, wince6.0 下测试通过

 

 

 

      

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值