关于VC++和SQL连接数据库的问题

#include"stdafx.h"#include"ADOConn.h"#include"DormitoryMS.h"#ifdef_DEBUG#undefTHIS_FI... #include "stdafx.h"
#include "ADOConn.h"
#include "DormitoryMS.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}
void ADOConn::OnInitADOConn()
{
//初始化OLE/COM环境
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect="Provider=SQLOLEDB; Server=CFDC891F6E6F445; UID=sa;PWD="";Database=DormitoryManage;";
m_pConnection->Open(strConnect, "","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,请开启数据库服务!");
PostQuitMessage(0);
//AfxMessageBox(e.Description());
}
}
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,请开启数据库服务!");
PostQuitMessage(0);
//AfxMessageBox(e.Description());
}
return m_pRecordset;
}
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,请开启数据库服务!");
PostQuitMessage(0);
// AfxMessageBox(e.Description());
return false;
}
}
void ADOConn::ExitConnect()
{
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
::CoUninitialize();
}
运行一下,没有报错!会出来登陆框,但是无论输入什么密码,点击确定出来Runtime Error!怎么办啊!
展开
 我来答
研究报告站
2008-10-21 · TA获得超过195个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:324万
展开全部
这个应该是连接字符串有问题了。
参考一下
/************************************************************************
* 函数名 : OpenDataBase
* 作者 : Raymond
* 创建时间: 2005.11.16
* 输入参数: LPCTSTR strDbType,数据库类型
* LPCTSTR strServer 服务器地址
* LPCTSTR strDB 数据库
* LPCTSTR strUser 用户名
* LPCTSTR strPwd 密码
* int nTimeOut 超时秒,默认30秒
* 输出参数: 无
* 执行功能: 用给出的数据库信息打开数据库,超时30秒
* 返回值 : 打开成功返回TRUE否则返回FALSE
************************************************************************/
BOOL CServerDataBase::OpenDataBase(LPCTSTR strDbType, LPCTSTR strServer, LPCTSTR strDB, LPCTSTR strUser, LPCTSTR strPwd, int nTimeOut)
{
CString strConn;
if(strcmp(strDbType, "SQLSERVER") == 0)
{
//Modified by Raymond 2005.12.30
//修改数据库连接方式
//Begin
strConn = L"Provider=SQLOLEDB;Persist Security Info=FALSE;Initial Catalog=";
strConn += strDB;
strConn += L";Data Source=";
strConn += strServer;
strConn += L";User ID=";
strConn += strUser;
strConn += L";Password=";
strConn += strPwd;
strConn += L";Connect Timeout=";
char szTimeOut[10];
sprintf(szTimeOut, "%d", nTimeOut);
strConn += szTimeOut;
strConn += L";";
/*
strConn = "driver={SQL Server};server=";
strConn += strServer;
strConn += ";database=";
strConn += strDB;
strConn += ";User Id=";
strConn += strUser;
strConn += ";Password=";
strConn += strPwd;
strConn += ";" ;
*/
//End
}
else if(strcmp(strDbType, "ACCESS") == 0)
{
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" ;
strConn += "Data Source=" ;
strConn += strServer ;
strConn += ";User Id=" ;
strConn += strUser ;
strConn += ";Password=" ;
strConn += strPwd ;
strConn += ";" ;
}
else if(strcmp(strDbType, "OLECAL") == 0)
{
strConn = "Provider=SQLOLEDB.1;";
strConn += "Data Source=";
strConn += strServer;
strConn += ";Initial Catalog=";
strConn += strDB;
strConn += ";User Id=";
strConn += strUser;
strConn += ";Password=";
strConn += strPwd;
strConn += ";";
}
else if(strcmp(strDbType, "DNS") == 0)
{
strConn = "DSN=";
strConn += strServer;
strConn += ";User Id=";
strConn += strUser;
strConn += ";Password=";
strConn += strPwd;
strConn += ";";
}
return OpenDataBase(strConn, nTimeOut);
}

/************************************************************************
* 函数名 : OpenDataBase
* 作者 : Raymond
* 创建时间: 2005.11.16
* 输入参数: CString sConnectString 连接字串
* 输出参数: 无
* 执行功能: 用给出的连接字串打开数据库,超时30秒
* 返回值 : 打开成功返回TRUE否则返回FALSE
************************************************************************/
BOOL CServerDataBase::OpenDataBase(CString sConnectString, int nTimeOut/* =30 */)
{
if(IsConnected()) CloseDataBase();
_bstr_t strcnn = sConnectString;
m_strConnectString= sConnectString;
m_iOpenTimeOut = nTimeOut;
try
{
m_pConnection->ConnectionString=strcnn;
m_pConnection->ConnectionTimeout = nTimeOut;

m_pConnection->Open(strcnn,"","",adConnectUnspecified); //同步打开数据库(异步用adAsyncConnect,然后等ConnectComplete事件)
}
catch(_com_error &e)
{
AdoPrintError(e);
return FALSE;
}
//如果打开状态则连接状态为TRUE
if(m_pConnection->State == adStateOpen)
{
m_bIsConnected = TRUE;
_TRACE("打开数据库成功");
return TRUE;
}
return FALSE;
}
百度网友d0e59ddf8
2008-10-23
知道答主
回答量:17
采纳率:0%
帮助的人:17.1万
展开全部
试试这样的格式:
//////////////////////////////////////////////// 连接数据库
AfxOleInit();
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=quanhao.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123","","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("Can not find the datasource, please confirm!");
return false;
}
/////////////////////////////////////查询表
char sql[100];
sprintf(sql,"select * from post");
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
m_pRecordset->Open(sql,
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
178752468
2008-10-21 · TA获得超过291个赞
知道小有建树答主
回答量:517
采纳率:0%
帮助的人:398万
展开全部
http://www.connectionstrings.com/
里面有各种数据库连接字符串的精准实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mlt598985891
2008-10-21 · TA获得超过1230个赞
知道小有建树答主
回答量:1128
采纳率:0%
帮助的人:0
展开全部
来的再具体些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式