1 建立工程文件
文件-新建-项目-MFC程序控件-选择名称及位置-确定-基于对话框-完成
删除已有的三个组件
2 添加ADO、DBGRID控件
2.1添加类
选中解决方案资源管理器中的项目名称-项目-添加类-双击ActiveX控件中的MFC类-
选择ADO-接口生成类-完成
选择DataGrid-接口生成类-完成
2.2插入ActiveX控件
对话框右击-插入ActiveX控件-ADO
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)))");