zoukankan      html  css  js  c++  java
  • Oracle oledb 打包并集成到程序安装包(VC ADO訪问Oracle)

          近期有一个项目和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("数据库连接错误! 错误信息:%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

           拷进去!

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

      

  • 相关阅读:
    005-请说一说黑盒与白盒的测试方法
    004-请问测试开发需要哪些知识?需要具备什么能力?
    003-请回答集成测试和系统测试的区别,以及它们的应用场景主要是什么?
    002-请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步
    001-请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
    012-App测试web测试的区别
    使用控制台调试WinForm窗体程序
    .NET MD5 加密
    域名转化到IP地址的实现
    特定用户QQ群聊天记录导出的实现
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7205989.html
Copyright © 2011-2022 走看看