请问测试数据库能否正常连接的小函数怎么写啊?(内详)

hexi1981 2003-10-20 09:49:24
我(VC初学者)想写一个测试数据库连接的小函数,自己写的有问题.

ADO不通过DSN对SQL SERVER数据库进行连接,通过前面得到的4个值来测试连接.

m_strDBIP:数据库Server的IP地址
m_strDBName:数据库名
m_strDBID:用户名
m_strDBPW:数据库密码

自己写的一部分,感觉问题很大,请帮我看看代码该怎么写,万分感谢.

void CDBSetupDlg::OnDBTestBUTTON()
{



//用对话框内的数据更新对象的数据
UpdateData();

//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;

//创建连接字符串
//_bstr_t strConn;
//strConn = "driver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139";

HRESULT hr;
try
{
//创建Connection对象
hr = m_pConnection.CreateInstance("ADODB.Connection");

if(SUCCEEDED(hr))
{
//设置超时时间为5秒
m_pConnection->ConnectionTimeout = 5;

//hr = m_pConnection->Open("driver={SQL Server};Server=127.0.0.1;DATABASE=autocap;UID=sa;PWD=password","","",adModeRead);
hr = m_pConnection->Open("driver={SQL Server};Server=127.0.0.1;DATABASE=tempdb;UID=sa;PWD=password1","","",adModeUnknown);
//不通过DSN对SQL SERVER数据库进行连接:
}
}
//捕捉异常
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);
}

if(SUCCEEDED(hr))
AfxMessageBox("连接数据库成功!");

//如果已经打开了连接则关闭它
//State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开
if(m_pConnection->State)
m_pConnection->Close();


}
...全文
70 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hexi1981 2003-10-20
  • 打赏
  • 举报
回复
我重新修改代码,但总是捕捉到这个错误"Unknown error 0x800A0BB9"

void CDBSetupDlg::OnDBTestBUTTON()
{

//用对话框内的数据更新对象的数据
UpdateData();

CString strConnect = "driver={SQL Server};Server="+m_strDBIP+";DATABASE="+m_strDBName+";UID="+m_strDBID+";PWD="+m_strDBPW;
AfxMessageBox(strConnect);

if(TestDB(LPCSTR(strConnect)))
AfxMessageBox("数据库连接成功!");

}

BOOL CDBSetupDlg::TestDB(LPCTSTR strConn)
{
//添加一个指向Connection对象的指针
_ConnectionPtr m_pConnection;

try
{
///创建 Connection 对象
HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");
if (SUCCEEDED(hr))
{
//设置超时时间为5秒
m_pConnection->ConnectionTimeout = 5;

// 连接数据库
if (SUCCEEDED(m_pConnection->Open(strConn, "", "", adModeRead)))
{
return TRUE;
}
}
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);

return FALSE;
}
catch (...)
{
AfxMessageBox("连接数据库时发生未知错误");
}
return FALSE;

//如果已经打开了连接则关闭它
//State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开
if(m_pConnection->State)
m_pConnection->Close();
}
spwnihao 2003-10-20
  • 打赏
  • 举报
回复
有什么问题,说出来呀
hexi1981 2003-10-20
  • 打赏
  • 举报
回复
Thanks for help :-)
spwnihao 2003-10-20
  • 打赏
  • 举报
回复
原来是strConn类型出错,CString怎么转换到_bstr_t呢??
CString strSQL = "Select * from TableDic";
BSTR bstrSQL = strSQL.AllocSysString();
m_pRecordset->Open(bstrSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);

//打开连接,直接写就行了
eg:
m_pConnection->Open("Provider=SQLOLEDB.1;Password=Yagopassword;Persist Security Info=True;User ID=sa;Initial Catalog=JapanBar;Data Source=(LOCAL)","","",0);
hexi1981 2003-10-20
  • 打赏
  • 举报
回复
原来是strConn类型出错,CString怎么转换到_bstr_t呢??

CString strConnect;
LPCTSTR(strConnect);
_bstr_t strConn = _bstr_t(strConnect);

这样还是出错啊~

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧