用SQLCE在WINCE6上远程连接服务器SQL2000数据库。
两个例子代码。
第一个是演示ISSCERDA->SubmitSQL这个方法的。参数配置:
_T("http://192.168.1.77/sqlce/sqlcesa30.dll")
_T("provider=sqloledb; data source=ACER-05; Initial Catalog=dbtest; user id=sa; password=password")
_T("UPDATE SERVERTIME SET CurTime=Getdate()")
执行远程SQL语句
hr = pCERDA->SubmitSQL(bQueryStr,bConnectStr);
可以成功运作。
第二个是演示PULL方法的。
已经在WINCE上创建了空数据文件:\\My Documents\\DB_Students.sdf,密码password,
参数配置:
_T("http://192.168.1.77/sqlce/sqlcesa30.dll"))
, m_internetUsername(_T("sa"))
, m_internetPassword(_T("password"))
, m_tracking(_T("TRACKINGON"))
, m_errorTableName(_T("tblErrors"))
, m_connectStr(_T("provider=sqloledb; data source=ACER-05; Initial Catalog=dbtest; user id=sa; password=password"))
, m_localConnectStr(_T("Provider=microsoft.sqlserver.oledb.ce.3.0;Data Source=\\My Documents\\DB_Students.sdf;password=password"))
, m_localTableName(_T("students"))
, m_queryStr(_T("select * from students"))
//获取服务器数据
hr = pCERDA->Pull(bLocalTableName,
bQueryStr,
bConnectStr,
trackOption,
bErrorTableName);
结果执行错误,提示的:
SQL Mobile在打开数据库时遇到问题。[,,,,,,]'
NUMBER:80040E21
NATIVE_ERROR:28559
远程连接的应该是对的,因为submitsql这个方法是执行成功的。
估计是本地数据库的连接上出了问题,但我找不到,大手赶紧来帮忙啊。
错误:80040E21 ,的意思是:
Multiple-step operation generated errors. Check each status value. No work was done.
这个英文的意思很清楚的,不用翻译吧!
我也搞SqlCE的同步,但没有遇到过这个错误。
有一点不知道楼主注意了没有:如果拉数据下来的话,那么要求被拉的表必须有一个Identity的主键。
引用: 引用 5 楼 cftxlin 的回复:
我也搞SqlCE的同步,但没有遇到过这个错误。
有一点不知道楼主注意了没有:如果拉数据下来的话,那么要求被拉的表必须有一个Identity的主键。
设置了主键。
上面那个应该是密码的问题,我前面建数据文件的时候,设置了密码,现在把密码去掉了,不过又变成了另外一个问题:
提示指定的表已存在, 错误80040E3F。可我是新建的数据文件啊,怎么可能表已经存在呢。
引用: 引用 5 楼 cftxlin 的回复:
我也搞SqlCE的同步,但没有遇到过这个错误。
有一点不知道楼主注意了没有:如果拉数据下来的话,那么要求被拉的表必须有一个Identity的主键。
我基本上就是下面这样的代码了。
服务器是SQL2000,
mobile6上运行的是isqlw30.
服务器名ACER-05,数据库名dbtest,帐号sa,密码password,表名students,主键ID。
PDA上,数据文件名:DB_Students.sdf,密码没有,路径\\My Documents\\DB_Students.sdf,表没有。
- HRESULT hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA);
- pCERDA->put_InternetURL("http://192.168.1.77/sqlce/sqlcesa30.dll");
- pCERDA->put_InternetLogin("sa");
- pCERDA->put_InternetPassword("password");
- pCERDA->put_LocalConnectionString("Provider=microsoft.sqlserver.oledb.ce.3.0;Data Source=\\My Documents\\DB_Students.sdf");
-
- pCERDA->Pull("students", "select * from students", "provider=sqloledb; data source=ACER-05; Initial Catalog=dbtest; user id=sa; password=password",
- TRACKINGON, "tblErrors");
这个问题的原因已经发现了。。
1,如果数据文件设置密码,会报错80040E21,提示打开数据库出现问题。
2,PULL的方式是TRACKINGON,也就是跟踪变化时, 会报错80040E3F,提示表已经存在,具体解决方法还没找到。