SQLCE连接数据库遇到的问题。错误80040E21

zhaoxu001   2009-3-3 16:02 楼主
用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

回复评论 (8)

学习了,还能这么用呀
点赞  2009-3-3 16:08
远程连接的应该是对的,因为submitsql这个方法是执行成功的。
估计是本地数据库的连接上出了问题,但我找不到,大手赶紧来帮忙啊。
点赞  2009-3-3 16:18
错误:80040E21 ,的意思是:
Multiple-step operation generated errors. Check each status value. No work was done.

这个英文的意思很清楚的,不用翻译吧!
点赞  2009-3-3 17:28
引用: 引用 3 楼 91program 的回复:
错误:80040E21 ,的意思是:
Multiple-step operation generated errors. Check each status value. No work was done.

这个英文的意思很清楚的,不用翻译吧!


这个错误信息是在哪里查的啊?
点赞  2009-3-4 10:42
我也搞SqlCE的同步,但没有遇到过这个错误。
有一点不知道楼主注意了没有:如果拉数据下来的话,那么要求被拉的表必须有一个Identity的主键。
点赞  2009-3-4 11:14
引用: 引用 5 楼 cftxlin 的回复:
我也搞SqlCE的同步,但没有遇到过这个错误。
有一点不知道楼主注意了没有:如果拉数据下来的话,那么要求被拉的表必须有一个Identity的主键。


设置了主键。

上面那个应该是密码的问题,我前面建数据文件的时候,设置了密码,现在把密码去掉了,不过又变成了另外一个问题:

提示指定的表已存在, 错误80040E3F。可我是新建的数据文件啊,怎么可能表已经存在呢。
点赞  2009-3-4 11:25
引用: 引用 5 楼 cftxlin 的回复:
我也搞SqlCE的同步,但没有遇到过这个错误。
有一点不知道楼主注意了没有:如果拉数据下来的话,那么要求被拉的表必须有一个Identity的主键。



我基本上就是下面这样的代码了。
服务器是SQL2000,
mobile6上运行的是isqlw30.
服务器名ACER-05,数据库名dbtest,帐号sa,密码password,表名students,主键ID。
PDA上,数据文件名:DB_Students.sdf,密码没有,路径\\My Documents\\DB_Students.sdf,表没有。



  1. HRESULT hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA);
  2. pCERDA->put_InternetURL("http://192.168.1.77/sqlce/sqlcesa30.dll");
  3. pCERDA->put_InternetLogin("sa");
  4. pCERDA->put_InternetPassword("password");       
  5. pCERDA->put_LocalConnectionString("Provider=microsoft.sqlserver.oledb.ce.3.0;Data Source=\\My Documents\\DB_Students.sdf");
  6.        
  7. pCERDA->Pull("students", "select * from students", "provider=sqloledb; data source=ACER-05; Initial Catalog=dbtest; user id=sa; password=password",
  8. TRACKINGON, "tblErrors");

点赞  2009-3-4 11:38
这个问题的原因已经发现了。。

1,如果数据文件设置密码,会报错80040E21,提示打开数据库出现问题。

2,PULL的方式是TRACKINGON,也就是跟踪变化时, 会报错80040E3F,提示表已经存在,具体解决方法还没找到。
点赞  2009-3-4 14:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复