vs2010连接oracle数据库

来源:互联网 发布:java调用系统api接口 编辑:程序博客网 时间:2024/05/16 10:03

1      建立工程文件

文件-新建-项目-MFC程序控件-选择名称及位置-确定-基于对话框-完成

 


删除已有的三个组件


2      添加ADO、DBGRID控件

2.1添加类

选中解决方案资源管理器中的项目名称-项目-添加类-双击ActiveX控件中的MFC类-

选择ADO-接口生成类-完成   


选择DataGrid-接口生成类-完成



2.2插入ActiveX控件

对话框右击-插入ActiveX控件-ADO


对话框右击-插入ActiveX控件-DataGrid

2.3选择工具箱

工具-选择工具箱项-ADODC-DataMergeError-Data

将工具栏中对应的控件填入


3      修改控件属性、添加事件处理事务(消息类型、类列表、程序名、添加编辑)、添加连接和断开函数

3.1    对于BUTTON1

 

点击【添加编辑即可】

3.2    对于BUTTON2

  同上

3.3    对于DataGrid1(添加变量、类型、控件、类别、变量名)

右击添加变量

点击【完成】

4      定义相关变量并完成相关函数的编写

4.1    对于StdAfx.h的操作

加入语句:

#import "msado15.dll"no_namespace rename("EOF","adoEOF")

4.2    对于VC_ORACLEDlg.cpp的操作

4.2.1  定义变量

//声明指向ADO对象的智能指针

_ConnectionPtr m_pConnection;

_RecordsetPtr m_pRecordSet;  //数据集指针

4.2.2  实现连接函数OnBnClickedConnect

OnConnect函数中添加以下代码:

CStringstrConnect =_T( "Provider=OraOLEDB.Oracle.1;Password=aa;Persist SecurityInfo=True;User ID=data;DataSource=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST -192.168.1.110)(PORT=1521)) )(CONNECT_DATA =(SID = ORCL)))");

      

                       HRESULT hr;

    //实例化ADO对象

       hr =m_pConnection.CreateInstance("ADODB.Connection");

       try

       {                       

          if(SUCCEEDED(hr))

                         {

            m_pConnection->ConnectionTimeout= 15;                          //设置连接时间

                          m_pConnection->Open(_bstr_t(strConnect),"","",adModeUnknown);     //连接SQL SERVER

 

                                       //char*pMessage;

                                       //pMessage="连接数据库成功";

                                       CStringMessage;

            Message.Format(_T("连接数据库成功"));

            AfxMessageBox(Message);                                      

                         }

                         else

                         {

                                         CString Message;

            Message.Format(_T("ADO对象实例化失败"));

            AfxMessageBox(Message);      

                         }

                        

                        

       }

       catch(_com_error e)  //捕捉异常

      {

                          CString errMessage;

           errMessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),

           (LPCTSTR)e.Description(),

           (LPCTSTR)e.ErrorMessage());                        

           AfxMessageBox(errMessage);

       }

 

//--------------------------------将数据库显示在界面上---------------------------------------------

   //char *pstrSql;

       //pstrSql="select * from 12 ";

       CString strSql=_T("select * from 12");

 

    try

       {

                       //创建数据集

          m_pRecordSet.CreateInstance("ADODB.Recordset");

                      

                       if (m_pRecordSet==NULL)

                       {

                           //AfxMessageBox("secflow---recordSet对象创建失败");

                       }

          //设置游标属性

        m_pRecordSet->CursorLocation=adUseClient;

        m_pRecordSet->Open(_variant_t(strSql),_variant_t((IDispatch*)m_pConnection,true),adOpenKeyset, adLockOptimistic, adCmdUnknown);

       }

    catch (_com_error& e)

       {

        CString strMsg;

                       strMsg.Format(_T("错误描述:%s\n错误消息%s"),

        (LPCTSTR)e.Description(),

        (LPCTSTR)e.ErrorMessage());

        AfxMessageBox(strMsg);

       }

      

       m_datagrid.putref_DataSource(NULL);//putref_DataSource

m_datagrid.putref_DataSource((LPUNKNOWN)m_pRecordSet);

       m_datagrid.Refresh();

4.2.3  实现连接函数OnBnClickedDisconnect

OnDisconnect函数中添加以下代码:

                if(m_pRecordSet->State)

                {

                                m_pRecordSet->Close();

                                m_pConnection->Close();

                                m_pRecordSet.Release();

                                m_pConnection.Release();

                }

 

5      复制对应的动态连接库msado15.dll实现VC和ORCL的连接

将msado15.dll文件到工程所在的文件夹下。


点击编译运行即可!点击【连接数据库】

6      错误解决方法

报错:LINK :fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

解决方案:

删除下面文件夹中较早版本cvtres.exe(可用重命名代替删除,防止无法找回)

   D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64(已尝试删除成功)

D:\Program Files(x86)\Microsoft Visual Studio 10.0\VC\bin

7      字符集设置

默认字符集为Unicode,此字符集下Cstring型对象复制需要加_T()

可将字符集设置为多字节字符集(项目—属性—配置属性—常规—字符集)

 

8         编辑框

修改ID

对话框添加类向导-成员变量-添加变量

ID中赋初值m_IP1 = _T("192");

连接数据库中改成“+ m_IP1+”

数据库连接函数中加UpdateData(TRUE);(控件值传至程序中,置于函数前部)UpdateData(TRUE);(程序值传至控件中,置于函数后部)

 

9用户名、密码

修改ID

对话框添加类向导-成员变量-添加变量

ID中赋初值m_code = _T("aa");

连接数据库中改成“+ m_code+”

数据库连接函数中加UpdateData(TRUE);(不需重复添加)

Code属性中的password改为true

 

10     按钮

添加处理程序

void C市流量Dlg::OnBnClickedcrtbstable()

{

       CStringcsSql;

       // TODO: 在此添加控件通知处理程序代码

       csSql="create table TR(stationid INTEGER,stationnameVARCHAR2(20),provinceid VARCHAR2(8),provincename VARCHAR2(8),sumentry INTEGER,equentryINTEGER,weightentry INTEGER,sumexit INTEGER,equexit INTEGER,weightexitINTEGER)";

       m_pConnection->Execute((_bstr_t)csSql,NULL, adCmdUnknown);

}

11     IP组件

添加变量


   BYTE IP1, IP2, IP3, IP4;
    m_IPADDRESS.GetAddress(IP1, IP2, IP3, IP4);
    CString IP;
    IP.Format("%d%s%d%s%d%s%d",IP1,".",IP2,".",IP3,".",IP4);
    CString strConnect =_T( "Provider=OraOLEDB.Oracle.1;Password="+m_password+";Persist Security Info=True;User ID="+m_username+";Data Source=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = "+IP+")(PORT =1521)) )(CONNECT_DATA = (SID = ORCL)))");





0 0
原创粉丝点击