开发环境:VC6.0+Oracle9i+ADO
设想:将数据库访问做成一个独立的动态库,所有访问者通过此动态库的输出函数与数据库交流
问题:由于没有在VC下做过数据库程序,有经验的朋友说一说
1、这样可以吗
2、如果不行,有没有其他好办法省却每次访问数据库的细节;如果可以,输出哪些函数,可以罗列一下函数声明
3、有相关代码麻烦贴些关键内容学习一下。谢谢!!
设想:将数据库访问做成一个独立的动态库,所有访问者通过此动态库的输出函数与数据库交流
问题:由于没有在VC下做过数据库程序,有经验的朋友说一说
1、这样可以吗
2、如果不行,有没有其他好办法省却每次访问数据库的细节;如果可以,输出哪些函数,可以罗列一下函数声明
3、有相关代码麻烦贴些关键内容学习一下。谢谢!!
解决方案 »
- VC中使用MSComm控件进行串口编程并在不同编辑框中显示的问题
- 用VC6.0实现基于对话框的保存图片的功能(添加一个保存图片按钮)
- 使用memcpy提示function does not take 1 parameters
- 有好项目 可以与本人联系 QQ:82865 本人有大量资金
- 如和在Release版本下向CListView发送用户自定义消息?
- c++强制类型转换的疑惑·
- 想做个外壳扩展, 在右键菜单中加入一个类似"发送到"的菜单项
- 如何在文本框中追加数据?
- 关于网络不良图片过滤的问题!
- 用SPCOMM for MFC类写串口通信问题
- 请问对于MFC的程序退出时都经历了哪些函数?
- 请问间隔一定时间绘图怎样做?
{
if (m_strService.IsEmpty())
{
::MessageBox(NULL,"·þÎñÃû²»ÄÜΪ¿Õ","Ìáʾ",MB_OK);
return FALSE;
} theApp.m_pConnection.CreateInstance(__uuidof(Connection));
try
{
//OLEDBÇý¶¯
theApp.m_strDatabase=m_strService;
CString strConn;
strConn="Provider=OraOLEDB.Oracle.1;Password=";
strConn+=m_strPassword;
strConn+=";Persist Security Info=True;User ID=";
strConn+=m_strUsername;
// strConn+=";SERVER=";
// strConn+=m_strService;
strConn+=";Data Source=";
strConn+= m_strService;
theApp.m_pConnection->Open((_bstr_t)strConn,
"",
"",
adModeUnknown);
}
catch(_com_error e)
{
::MessageBox(NULL,e.Description(),"Ìáʾ",MB_OK);
return FALSE;
}
::MessageBox(NULL,"Êý¾Ý¿âÁ¬½Ó³É¹¦£¡","Ìáʾ",MB_OK);
return TRUE;}
http://www.codeproject.com/database/adowraps.asp
http://www.codeproject.com/database/aadoclass.asp
http://www.codeproject.com/database/caaadoclass1.asp
syy64(太平洋)写的是连接数据库的函数,如果我想在写一个SelectSql()函数,用来执行SQL查询语句,应该返回什么呢?是不是还应该写个InsertSql(),DeleteSql(),CloseOracle(),IsConnectOracle()---是否已经连接数据库 IsCloseOracle()--是否已经断开数据库 函数呢? laiyiling(【CSDN●目标】) 提供的地址我去看看。
比如:动态库AdoConnOracle.dll输出一个查询函数SelectSql()
我在程序中使用这个动态库的相关函数....省去动态连接相关语句...CString strSql = "SELECT id,name FROM user";//使用动态库函数连接数据库
ConnectOrale();//如果连接执行查询
if(isConnectOracle)
{
XXX = SelectSql(strSql); //XXX应该是什么类型?函数SelectSql怎样能返回查询结果呢
}//输出结果
for(...)
{
输出...
}//关闭数据库连接
CloseOracle();谢谢大家!help!
1、在stdafx.h中导入ado库,为了避免冲突,将EOF改名为EndOfFile
#import "msado15.dll" no_namespace rename("EOF","adoEOF")
2、创建新类COracleADO,生成文件OracleADO.h和OracleADO.cpp。
3、定义两个成员变量
// 连接对象
_ConnectionPtr m_pConnection;
// 是否已连接数据库
BOOL m_bConnectedOracle;
4、定义并实现相关连接、断开及执行SQL语句的成员函数// 判断是否与指定数据库建立了连接
BOOL COracleADO::IsConnectedOracle()
{
if(TRUE == m_bConnectedOracle)
{
return TRUE;
}
else
{
return FALSE;
}
}// 根据指定参数连接数据库
// datasource 数据源 userid 用户名 password 密码
BOOL COracleADO::ConnectOracle(_bstr_t datasource, _bstr_t userid, _bstr_t password)
{
//初始化com环境
::CoInitialize(NULL); try
{
m_pConnection.CreateInstance(__uuidof(Connection)); _bstr_t strConnect="Provider=OraOLEDB.Oracle.1; ";
strConnect += "Data Source=";
strConnect += datasource;
strConnect += ";User ID=";
strConnect += userid;
strConnect += ";Password=";
strConnect += password;
m_pConnection->Open(strConnect,"","",NULL);
} catch(_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
} m_bConnectedOracle = TRUE;
return TRUE;
}// 断开与数据库的连接
BOOL COracleADO::DisconnectOracle()
{
if(TRUE == IsConnectedOracle())
{
try
{
m_pConnection->Close();
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return FALSE;
} ::CoUninitialize();
}
return TRUE;
}// 执行SQL语句,可以返回记录集
_RecordsetPtr COracleADO::ExecuteOracle(_variant_t varSQL)
{
_RecordsetPtr pRec;
pRec.CreateInstance(__uuidof(Recordset));
pRec->Open(varSQL,
m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText); return pRec;
}
COracleADO oraConn;
BOOL bOK = TRUE;
if(FALSE == oraConn.IsConnectedOracle()) //尚未建立连接
{
bOK = oraConn.ConnectOracle("","sa","aa"); //连接数据库
}
if(TRUE == bOK) //已经建立了连接
{
_RecordsetPtr pRec;
_variant_t vTname;
try
{
pRec = oraConn.ExecuteOracle("SELECT TNAME FROM tab");
while(!pRec->adoEOF)
{
vTname = pRec->GetCollect("TNAME");
if(vTname .vt!=VT_NULL)
{
AfxMessageBox(_bstr_t(vTname ));
}
pRec->MoveNext();
}
pRec->Close();
}
catch (_com_error e)
{
AfxMessageBox(e.Description());
}
catch(...)
{
AfxMessageBox("ADO发生错误!");
}
}