万恶的微软之ADOCE苦旅
来源:互联网 发布:淘宝联盟买家有优惠吗 编辑:程序博客网 时间:2024/04/30 22:25
万恶的微软,痛苦的ADOCE~~~~
近来一直很郁闷,都是万恶的微软闹的。当初选中VS2005平台就是看重他的高度集成性,可是猜中了这开头,却没料到这结局。早知道用EVC好了。哎~
原来搞的一套接口是基于odbc的,忙活半天才发现,PPC平台不支持ODBC。kao!于是考虑OLE-DB,后来发现ADO.NET非常方便,心驰神往啊~。又是手忙脚乱半天,居然发现VC++MOBILE项目中死活不能#using <mscorlib.dll> #using <System.dll> #using <system.data.dll> #using namespace System; #using namespace System::Data; #using namespace System::Data::OleDb; !被告知:fatal error C1190: managed targeted code requires a '/clr' option。万恶的编译器~太无情了!傻傻的尝试在工程属性中添加Common Language Runtime支援。居然发现没有这一项,kao!几经周折,终于明白一个真理:
万能的神啊~万恶的微软。
没办法,只好走老路。考虑OLE-DB,后来发现有ADOCE这东西,已将OLE-DB封装,欣喜若狂。快乐的时光总是这样的短暂,不久便发现ADOCE是个阉货~短斤缺两不说,配置起来还很繁复。那位看官问了:有多繁复啊?我的回答是:那是相当的繁复。
在ADOCE的苦旅之上有如此多的同行者,这是令人欣慰的事,起码不会觉的孤独和彷徨。在这一刻,我不是一个人在战斗。万恶的微软将我们禁锢在这.NET的牢笼之中,我们要冲出这牢笼,超越.NET,超越WINDOWS,超越这万恶的微软。当然这是后话……
下载:
① adocepbzip安装包:http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=929bb147-281c-4d6e-a727-67271075fadb&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fado%2fCE-PB%2f3.1%2fWCE%2fEN-US%2fadocepbzip.exe
② VoAdo是VOS公司做的一个使用比较方便的ADOCONNECTION和ADORECOEDSET类,下载下来的需要修改(见3)才能使用,本压缩包的文件已经做了修改.在这里下载http://www.voscorp.com/products/developer/winmobile/voado/voado.zip
③adoce31.h和adocec31.h文件的生成:
在微软的adocepbzip安装包的adocepb/setup/Data Access 3.1/Program Files/DataAccess31/INCLUDE目录下,有这样两个文件adoce31.idl和adocec31.idl,在命令行中执行midl adoce31.idl和midl adocec31.idl即可生成.h文件.
注意:这里在vc6.0环境下生成的成功率比较高,.net的编译器很绝情
关于midl,请看blog中的扫盲:什么是IDL和MIDL?(转载)
1.将Adoce PPC_ARM文件夹:
2.数据库程序中在使用VOADO之前注册这些DLL
CreateProcess(_T("RegSvrCe"),_T("/s Windows/Adoxce31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CreateProcess(_T("RegSvrCe"),_T("/s Windows/Adocedb31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CreateProcess(_T("RegSvrCe"),_T("/s Windows/Adoceoledb31.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CreateProcess(_T("RegSvrCe"),_T("/s Windows/Msdaer.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CreateProcess(_T("RegSvrCe"),_T("/s Windows/Msdaeren.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CreateProcess(_T("RegSvrCe"),_T("/s Windows/msdadc.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
CreateProcess(_T("RegSvrCe"),_T("/s Windows/msdaosp.dll"),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
3.将VoAdo中所有文件添加到你的工程中,将其中adoce30.h都改为adoce31.h;
4.将vorecordset.h文件中此处改为
BOOL CVORecordset::g_Init = FALSE;
CLSID CVORecordset::g_ClsID;
TCHAR* CVORecordset::g_ProgID = TEXT("ADOCE.Recordset.3.1");
原来第3句为TCHAR* CVORecordset::g_ProgID = TEXT("ADOCE.Recordset.3.0");
5.将Include文件夹中的adoce31.h和adocec31.h添加到你的工程中;
6.将regsvrce.exe复制到设备中和你的数据库程序同一个文件夹下(该文件在Program Files/Microsoft eMbedded C++ 4.0/EVC/WCE400/TARGET/ARMV4文件夹下)。
真是令人心寒,反复翻阅SQLMOBILE联机帮助,发现一个惊人事实:
一点脾气都没有了。身心俱疲~
2008.03.24修改
今天心情不错啊~终于解决一个大难题。上面提到的无法打开.sdf文件的问题终于被某彻底KO了。
原先的问题是这个语句:
hr = iADOCEConn->Open(_T("/My Documents/XXX.sdf"),L"",L"",MSADOCE::adOpenUnspecified);
hr返回值总为为负数。死活不回头。今天发现原来是SQLCE版本的问题在作祟。目标设备上原先装的是mobile版本,反复不行后,又装了SQL Server CE 2.0。混乱!SQLCE2.0的数据库在Mobile中无法打开。Mobile的在SQLCE2.0中也是无法打开的。真是生死冤家。原来就是贪图方便使用了Mobile自带的Northwind.sdf文件,结果遭到报应。哎~
现重新装过SQLCE,小心起见只装SQLCE2.0,用其创建一个简单的数据库test.sdf。尝试如下方法解决:
hr = m_pConnection->put_Provider(_T("CEDB"));
hr = m_pConnection->Open(lpDataSource,TEXT(""),TEXT(""),adOpenUnspecified);
lpDataSource = _T("Provider = Microsoft.SQLSERVER.OLEDB.CE.2.0;data source = /My Documents/test.sdf");
还是不行的话请确定安装的版本是否为Microsoft SQL Server CE 2.0,如不是或者将数据库版本换成此版本 或者更改Provider。
至此,万恶的微软又一次倒在我们脚下,
- 万恶的微软之ADOCE苦旅
- 万恶的BOM,万恶的微软
- 苦逼的T420装机之旅!
- 使用ADOCE的前期准备
- 过早的优化是万恶之源
- 程序移植的问题: 万恶的微软,万恶的的VC 2005分发包版本: 8.0.50727.4053
- 苦逼的程序员之旅又开始了
- 一次Android WebView使用的苦逼体验之旅
- 苦逼的CUDA 与 OPENCV 配置 之旅
- Android苦手的App之旅(序)
- Android苦手的App之旅(1)
- Android苦手的App之旅(2)
- Android苦手的App之旅(3)
- Android苦手的App之旅(4)
- Android 沉浸式状态栏的苦逼之旅
- Sql Server之旅——第二站 理解万恶的表扫描
- Sql Server之旅——第二站 理解万恶的表扫描
- Sql Server之旅——第二站 理解万恶的表扫描
- 从给定的文本中,查找其中最长的重复子字符串的问题
- LINUX下的CP命令的源代码
- .NET手持设备开发工具包安装调试篇
- Oracle10g BIGFILE表空间带来的好处
- 解决问题:Concurrency violation: the UpdateCommand affected 0 of the expected 1 records(UpdateCommand 影响了预期1 条记录中的0 条 )
- 万恶的微软之ADOCE苦旅
- ToString()对性能的影响
- 第一个DWR
- 使用dbms_stats但不生成histogram的方法
- 3D游戏实时显示帧率,截图(bmp,jpg,png),录象(wmv,avi)等功能的软件
- 一条SQL生成九九乘法表
- evc4工程移植vs.net2005所碰到的问题积累
- 暂停一个进程的运行
- JRuby语言内部报道:CRuby语言和JRuby语言gem命令差异