近期有一个项目和oracle交互,我用的是ADO的方式进行试问操作。

首先把数据库连接的东东记录一下,老了记性不好啊!

操作例如以下:

//连接串这么写的话就能够不用配置 tnsnames.ora配置文件了(网上非常多教程都让改这个配置文件)

strConnect.Format("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;\

                          Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = %s)) )(CONNECT_DATA = (SID = %s)))\"",

                          strPWD, strUID, strHost, strPort, strSid);

hr = m_pConnection.CreateInstance(__uuidof(Connection));

           try

           { 

                 m_pConnection->ConnectionTimeout = lConnectTime;

                 hr = m_pConnection->Open((LPCTSTR)strConnect, "", "", adModeUnknown);

                 if(FAILED(hr))

                 {

                       SHAREDATA.g_pMainFrame->Alert(_T("数据库连接失败,请检查数据库!"));

                       return FALSE;

                 }

           }

          catch(_com_error e)

          {  

              CString err;

              err.Format(_T("数据库连接错误!\r\n错误信息:%s:"),e.ErrorMessage());

              SHAREDATA.g_pMainFrame->Alert(err);

               return FALSE;

          }

m_bConnectDB = TRUE;

//查询数据部分

if( m_pUserRecSet )

         {

             if( m_pUserRecSet->State )

             m_pUserRecSet->Close();

             m_pUserRecSet = NULL;

         }

         try{

               m_pUserRecSet.CreateInstance(__uuidof(Recordset));

               m_pUserRecSet->Open("select * from xxx", m_pConnection.GetInterfacePtr(), \

               adOpenDynamic, /*adOpenStatic, */

               adLockOptimistic, adCmdText);

         }

         catch(_com_error& e)

         {

              AfxMessageBox(e.Description() + e.Source());

              return;

         }

//....

然后打包公布, 安装程序后一跑弹出数据连接错误。 百度,google知其需装oracle的oledb提供程序

知道原因好办,缺啥补啥!

http://www.oracle.com/technetwork/database/windows/utilsoft-088126.html

下载了ODAC101040.exe后安装。 数据库操作正常!

到此跑我们系统仅仅需安装我们的程序包 和 ODAC101040.exe 中的  oracle Provider for oledb ... 组件。

开发给人员觉得能够了,挺简单了,于是乎发给客户使用。

没想到客户立即跳起来, 大声嚷嚷:

1.  两步安装太复杂了

2. odac101040 有100多M 太大了

3. 我们要的是一个包,傻瓜式的点点就必须能用,改,必须改,立即改。。

哎。客户是上帝,仅仅能低声下气争取了点时间。

也对换位思考,假设我是客户也不想来回折腾,程序猿就是要追求完美,拥抱变化,在变化中实现自我,呵呵, 扯一下蛋。

需求非常明白了: 把oracle provider for oledb 相关的东东集成到程序安装包中。同一时候安装包不能太大!

万能的互联网。让我找到一篇文章: http://blog.csdn.net/dux003/article/details/5657531 (感谢作者)

过程例如以下:

1. 按 《oracle oledb最小安装包制作 》的教程提取出oracle相关文件

2. 下载并安装Wise Installation System - Professional Edition来制作安装包  ( 网上有教程,略去)

按以上步骤搞还是花了一天时间, 主要是最小安装包中对“安装过程”的描写叙述比較粗糙。主要是我对安装包制作不在行。大部分时间花在这,嘿嘿

有一些注意的点例如以下:

1.  wise installation 不须要像步骤1相关文章指出那样导出key, 能够例如以下图把整个注冊表项打包进去

2. 我是把文件oracle放到程序文件夹中去, 然后改动注冊表中的项(我改动了全部的项):

注: 用%MAINDIR%能够动态的指定注冊表的路径

3. 把oracle是相关路径增加到环境变量中去。 界面不知道怎么加, 用脚本加了。我加到最后:

到此oracle集成打包已经告一段落了。

然后把ODAC101040.exe的相关服务卸载掉。然后点击安装包開始安装, 期待激动人心的时刻到来, 等。

。。

。。

没有激动人心,等到数据库边接错误!!

重新启动电脑后,嘿嘿。 不出现数据库连接错误了。小小一乐,但出现还有一个更头痛的错误:

网上的 http://blog.csdn.net/dragoo1/article/details/10138847  这篇文件似乎有感觉,但我们不是server啊。检查环境变量

最后怀疑bin的dll不完整。把全部的oracle/bin的文件夹拷过来,再试能够了。 但貌似有点多。看了上面的错误应该是OLEDB相关的

蒙一回。把(原来bin中还剩余的OraOLEDB相关dll)

OraOLEDB10zhs.dll

OraOLEDBrfc10.dll

OraOLEDBrmc10.dll

拷进去!

再次执行, 激动人心的时刻真正到来!

Oracle oledb 打包并集成到程序安装包(VC ADO訪问Oracle)的更多相关文章

  1. 制作Linux下程序安装包——使用脚本打包bin、run等安装包

    制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可. ...

  2. 使用VS2015打包winform程序安装包简单方法(不需要InstallShield)

    转载自:   DGPLM博客 使用VS2015打包winform程序安装包简单方法(不需要InstallShield)

  3. 基于DevExpress的Winform程序安装包的制作

    在我们做系统开发的时候,都会面临一个安装包制作的问题,如何把我们做好的系统,通过安装包工具整合成一个安装包给客户进行安装.安装包的优势就是一步步安装就可以了,不用复制一大堆文件给客户,还怕缺少那个文件 ...

  4. Mac OS平台下应用程序安装包制作工具Packages的使用介绍

    一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...

  5. 使用WinRar软件制作程序安装包

    之前我写过使用好压软件打包程序,见随笔: 使用好压(HaoZip)软件打包EverEdit制作安装程序 - Fetty - 博客园http://www.cnblogs.com/fetty/p/4907 ...

  6. 用inno Setup做应用程序安装包的示例脚本(.iss文件)(

    用innoSetup做应用程序安装包的示例脚本(.iss文件),具体要看innoSetup附带的文档,好象是pascal语言写的脚本. 示例1(应用程序.exe,客户端安装): ;{089D6802- ...

  7. 【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)

    VB6.0应用程序安装包的生成,利用其自带的打包工具生成的安装程序很简陋,一点不美观:如果想让自己的应用程序安装的时候显得高大上一点,本教程提供使用Setup Factory 9.0制作安装包的方法. ...

  8. C#软件winform程序安装包制作及卸载程序制作

    使用vs2010 winform程序开发的软件的人比较多,程序的开发是为了在不同的人不同的机器使用,为了使不同的机器能使用该软件就需要在制作程序安装包,安装包里必须包含该软件运行所选的所有环境,下面就 ...

  9. 用Inno Setup制作WEB程序安装包

    原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...

随机推荐

  1. poj1985&&第四次CCF软件认证第4题 求树的直径

    Cow Marathon Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 4216   Accepted: 2137 Case ...

  2. java反射的基本使用

    反射机制是java中非常重要的功能,熟练使用反射功能对实际的开发有很大的帮助. 一,通过反射获取对象实例 使用的对象User package whroid.java.reflect; public c ...

  3. google chrome & preferences & languages

    google chrome & preferences & languages language settings https://www.google.com/preferences ...

  4. [HDNOIP2017提高组]题解

    (送给外省的同学们:HD = 海淀) [HDNOIP201701]小鱼干 试题描述 小喵喵有 n 个小鱼干排成一列,其中第 i 个小鱼干有两种属性,美味度 ai 和特殊度 bi. 现在小喵喵要吃掉一些 ...

  5. HUST-1407 郁闷的小J

    离线做法:分别处理每个编号上的各种询问和操作,接着就能用树状数组维护. #include <cstdlib> #include <cstdio> #include <cs ...

  6. bzoj 2799 [Poi2012]Salaries 性质+二分

    题目大意 给出一棵n个结点的有根树,结点用正整数1~n编号. 每个结点有一个1~n的正整数权值,不同结点的权值不相同, 并且一个结点的权值一定比它父结点的权值小(根结点的权值最大,一定是n). 现在有 ...

  7. 莫比乌斯函数之和(51nod 1244)

    莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如 ...

  8. Docker 组件如何协作?

    还记得我们运行的第一个容器吗?现在通过它来体会一下 Docker 各个组件是如何协作的. 容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本 ...

  9. 洛谷 P1131 选择客栈

    题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...

  10. canvas绘制视频封面--摘抄

    一.需求:上传视频,同时截取视频某一帧作为视频的封面. 二.实现思路:利用canvas绘制图像的功能,绘制图像某一帧,这里绘制了第一帧,很简单就实现了. 三.代码: <!DOCTYPE html ...