|
我采用了rda,看似比合并复制简单~
我觉得我的 sql server 和 sql ce都配好了~
但是我发现跳痛需要运气,我没有什么资料,全都是瞎梦乱拽的程序,自己组装的。我得rda的pull是这样写的
ISSCERDA *pCERDA = NULL;
BSTR bStr = NULL;
BSTR bConnectStr = NULL;
BSTR bQueryStr = NULL;
BSTR bLocalConnectStr = NULL;
BSTR bLocalTableName = NULL;
BSTR bErrorTableName = NULL;
RDA_TRACKOPTION trackOption = TRACKINGOFF;
SYSTEMTIME systemtime; // 系统时间
double timeTotal; // 总共消耗的时间
__int64 timeStart = 0; // 开始操作时的时间
__int64 timeStop; // 结束操作时的时间
WCHAR wszBuffer[512];
//得到pCERDA接口
HRESULT hr = CoCreateInstance(CLSID_RemoteDataAccess, NULL, CLSCTX_INPROC_SERVER, IID_ISSCERDA, (LPVOID *)&pCERDA);
ASSERT(hr == S_OK);
ASSERT(pCERDA != NULL);
//1、设置Internet URL
bStr = SysAllocString(_T("http://BJUT-D462809A91/sqlce/sscesa20.dll"));
pCERDA->put_InternetURL(bStr);
SysFreeString(bStr);
//2、设置Internet userName
bStr = SysAllocString(L"BINBIN");
pCERDA->put_InternetLogin(bStr);
SysFreeString(bStr);
//3、设置Internet password
bStr = SysAllocString(L"");
pCERDA->put_InternetPassword(bStr);
SysFreeString(bStr);
//4、得到跟踪类型
/*if (dlgPull.m_tracking == L"TRACKINGON")
{
trackOption = TRACKINGON;
}else if (dlgPull.m_tracking == L"TRACKINGOFF")
{
trackOption = TRACKINGOFF;
}else if (dlgPull.m_tracking == L"TRACKINGON_INDEXES")
{
trackOption = TRACKINGON_INDEXES;
}else if(dlgPull.m_tracking == L"TRACKINGOFF_INDEXES")
{
trackOption = TRACKINGOFF_INDEXES;
}else
{
trackOption = TRACKINGOFF;
}*/
trackOption = TRACKINGON;
//5、设置错误表名
bErrorTableName = SysAllocString(L"errorTable");
//6、设置服务器连接串
bConnectStr = SysAllocString(L"provider=sqloledb; data source=BJUT-D462809A91; Initial Catalog=mydatabase; user id=sa; password=sa");
//7、设置本地数据库连接串
bLocalConnectStr = SysAllocString(L"Provider=microsoft.sqlserver.oledb.ce.2.0;Data Source=\\My Documents\\mydb.sdf");
pCERDA->put_LocalConnectionString(bLocalConnectStr);
SysFreeString(bStr);
//8、设置本地表名
bLocalTableName = SysAllocString(L"food");
//9、设置查询的SQL语句
bQueryStr = SysAllocString(L"select * from food");
//记录获取服务器数据前的时间
//GetLocalTime(&systemtime);
//SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStart);
//获取服务器数据
hr = pCERDA->Pull(bLocalTableName,
bQueryStr,
bConnectStr,
trackOption,
bErrorTableName);
//SysFreeString(bLocalTableName);
SysFreeString(bQueryStr);
SysFreeString(bConnectStr);
SysFreeString(bErrorTableName);
if (SUCCEEDED(hr))
{
//记录获取服务器数据后的时间
//GetLocalTime(&systemtime);
//SystemTimeToFileTime(&systemtime, (FILETIME*)&timeStop);
//记录获取服务器数据的总时间
//timeTotal = ((double)(timeStop - timeStart) / 10000000);
swprintf(wszBuffer, _T("从服务器获取数据成功\r\n\r\总共消耗 = %8.3f秒"), timeTotal);
AfxMessageBox(wszBuffer);
}
else
{
//显示获取服务器数据错误
ISSCEErrors *pISSCEErrors = NULL;
if(SUCCEEDED(hr = pCERDA->get_ErrorRecords(&pISSCEErrors)))
{
AfxMessageBox(L"服务器数据错误");
//ShowErrors(pISSCEErrors);
pISSCEErrors->Release();
}
}
//释放远程访问接口
pCERDA->Release();
这是我的rda PULL程序代码
最后走到了AfxMessageBox(L"服务器数据错误");这一步。。。
就是我还没成功~我上网找资料查,怎么也看不出来自己哪里错了。。。
我今天就要去交作业了~~这部分算是完不成了~等交完了作业我在研究~
心得就是!痛苦!!! |
|