关于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!怎么办啊! 展开
#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!怎么办啊! 展开
展开全部
这个应该是连接字符串有问题了。
参考一下
/************************************************************************
* 函数名 : 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;
}
参考一下
/************************************************************************
* 函数名 : 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;
}
展开全部
试试这样的格式:
//////////////////////////////////////////////// 连接数据库
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());
}
//////////////////////////////////////////////// 连接数据库
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());
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
http://www.connectionstrings.com/
里面有各种数据库连接字符串的精准实现
里面有各种数据库连接字符串的精准实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
来的再具体些
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询