MFC与SQL Sever连接的问题

lessia 2009-05-13 11:21:41
这是《Visual C++ + SQL Server数据库开发与实例》第四章的例子:
	CString strConnect;
strConnect.Format("DSN=%s;UID=%s;PWD=%s",m_bDSN,m_bUsername,m_bPassword);
//打开数据库的连接,并且捕获异常
TRY{
m_db.OpenEx(strConnect,CDatabase::noOdbcDialog);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}

m_db是CDatabase的一个对象。上面这段语句的作用就是连接数据库。书上说,在利用MFC ODBC开发数据库应用程序时,应该先配置ODBC数据源,我一步一步按照书上的要求做了一遍,最后测试时,还是说有错误:未发现数据源名称并且未指定默认驱动程序。也就是执行了AfxMessageBox(ex->m_strError);这条语句。我猜是我配置数据源有问题,但我是照着书上一步步来的呀,我不知道有什么问题,不知道各位有没有什么好的建议。
  另外,请大家解释一下语句strConnect.Format("DSN=%s;UID=%s;PWD=%s",m_bDSN,m_bUsername,m_bPassword);中的三个参数,m_bDSN我知道是数据源的名称,可m_bUsername和m_bPassword是什么我不太清楚,我设置数据源的时候没有用到用户名和密码呀。大家快帮帮忙,这是我们软件工程课程上的一个作业,谢谢!
...全文
401 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
liliangbao 2009-05-13
  • 打赏
  • 举报
回复
参考
http://www.cnblogs.com/ost/archive/2007/03/20/680680.html
acdbxzyw 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lessia 的回复:]
可我没有在数据库里面没有设置用户啊,我自己登陆的时候也不需要密码。麻烦你能不能再说清楚点,我是一点也不懂。
[/Quote]
是用的sql server吗?
如果是,你登陆数据库的时候采用的是windows 综合验证,要换成sql server 验证 什么的,反正就是另外一个要用户名和密码的验证方式
上网查查怎么修改登录方式
baiwei156 2009-05-13
  • 打赏
  • 举报
回复
MFC中,主要有两种方法可以连接sql数据库
1.利用ADO连接:
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
//必须import这个dll,这个文件通常放在C:\Program Files\Common Files\System\ado路径下.
_ConnectionPtr m_ptrConnection; //数据库连接对象
构造函数中添加如下语句
m_ptrConnection = NULL;
::CoInitialize(NULL);
//连接数据库的主要代码
BOOL DataVisitor::ConnectDataBase(_bstr_t connectionStr)
{
/*
Added by stone. If IDOConnection has not been set up,then create one.
*/
if(m_ptrConnection == NULL)
{
HRESULT hr = m_ptrConnection.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
{
return FALSE;
}
else
{
_bstr_t strConnect = connectionStr;
//"Provider=SQLOLEDB;Server=(local);Database=navigation; uid=sa; pwd=3277625;";

m_ptrConnection->CursorLocation = adUseClient;
m_ptrConnection->IsolationLevel = adXactReadCommitted;
try
{
m_ptrConnection->Open(strConnect,"","",adModeUnknown);
return TRUE;
}
catch (_com_error e)
{
// AfxMessageBox((char *)e.Description());
return FALSE;
}

}
}
return TRUE;
}


2. 利用ODBC连接
#include <afxdao.h>
CDaoDatabase *MyDataBase;

BOOL MyDB_OperSqL::Open_MyDatabase(CString connstr)
{
try
{
if (MyDataBase == NULL)
{
MyDataBase = new CDaoDatabase();
}
MyDataBase->Open(NULL,0,0,connstr);

}
catch( CDaoException* e )
{
CString message = _T("MyDB_OperSqL 数据库异常: ");
message += e->m_pErrorInfo->m_strDescription;
char info[400];
sprintf(info,message);
DispErrorMessage(info,__LINE__);
e->Delete( );
return FALSE;
}
catch (CMemoryException *e)
{
DispErrorMessage("MyDB_OperSqL 内存异常!",__LINE__);
e->Delete( );
return FALSE;
}
catch(...)
{
DispErrorMessage("MyDB_OperSqL 其它异常!",__LINE__);
return FALSE;
}
return TRUE;
}

这里的连接字符串connstr一般是如下内容
"ODBC;DRIVER={SQL Server};SERVER=(local);DATABASE=yourDataBase;UID=yourID;PWD=yourPassword"

baiwei156 2009-05-13
  • 打赏
  • 举报
回复
MFC中,主要有两种方法可以连接sql数据库
1.利用ADO连接:
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
//必须import这个dll,这个文件通常放在C:\Program Files\Common Files\System\ado路径下.
_ConnectionPtr m_ptrConnection; //数据库连接对象
构造函数中添加如下语句
m_ptrConnection = NULL;
::CoInitialize(NULL);
//连接数据库的主要代码
BOOL DataVisitor::ConnectDataBase(_bstr_t connectionStr)
{
/*
Added by stone. If IDOConnection has not been set up,then create one.
*/
if(m_ptrConnection == NULL)
{
HRESULT hr = m_ptrConnection.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
{
return FALSE;
}
else
{
_bstr_t strConnect = connectionStr;
//"Provider=SQLOLEDB;Server=(local);Database=navigation; uid=sa; pwd=3277625;";

m_ptrConnection->CursorLocation = adUseClient;
m_ptrConnection->IsolationLevel = adXactReadCommitted;
try
{
m_ptrConnection->Open(strConnect,"","",adModeUnknown);
return TRUE;
}
catch (_com_error e)
{
// AfxMessageBox((char *)e.Description());
return FALSE;
}

}
}
return TRUE;
}


2. 利用ODBC连接
#include <afxdao.h>
CDaoDatabase *MyDataBase;

BOOL MyDB_OperSqL::Open_MyDatabase(CString connstr)
{
try
{
if (MyDataBase == NULL)
{
MyDataBase = new CDaoDatabase();
}
MyDataBase->Open(NULL,0,0,connstr);

}
catch( CDaoException* e )
{
CString message = _T("MyDB_OperSqL 数据库异常: ");
message += e->m_pErrorInfo->m_strDescription;
char info[400];
sprintf(info,message);
DispErrorMessage(info,__LINE__);
e->Delete( );
return FALSE;
}
catch (CMemoryException *e)
{
DispErrorMessage("MyDB_OperSqL 内存异常!",__LINE__);
e->Delete( );
return FALSE;
}
catch(...)
{
DispErrorMessage("MyDB_OperSqL 其它异常!",__LINE__);
return FALSE;
}
return TRUE;
}
这里的连接字符串connstr一般是如下内容
"ODBC;DRIVER={SQL Server};SERVER=(local);DATABASE=yourDataBase;UID=yourID;PWD=yourPassword"

lingyin55 2009-05-13
  • 打赏
  • 举报
回复
另外,请大家解释一下语句strConnect.Format("DSN=%s;UID=%s;PWD=%s",m_bDSN,m_bUsername,m_bPassword);中的三个参数,m_bDSN我知道是数据源的名称,可m_bUsername和m_bPassword是什么我不太清楚,我设置数据源的时候没有用到用户名和密码呀。

在m_bUsername和m_bPassword中传入sa,sa试试。
或者参考这个过程重新试下
http://blog.163.com/zhangsumei0712@126/blog/static/104377832200922024050217/
lingyin55 2009-05-13
  • 打赏
  • 举报
回复
papaofdoudou 2009-05-13
  • 打赏
  • 举报
回复
mark
xiao0915 2009-05-13
  • 打赏
  • 举报
回复
与代码无关
是你的数据库没设置好数据源
Proteas 2009-05-13
  • 打赏
  • 举报
回复
用 ADO 连接数据库的例子很多,关键是连接串。你找找,网上一堆。
lessia 2009-05-13
  • 打赏
  • 举报
回复
可我没有在数据库里面没有设置用户啊,我自己登陆的时候也不需要密码。麻烦你能不能再说清楚点,我是一点也不懂。
VIPVIPVIP 2009-05-13
  • 打赏
  • 举报
回复
m_bUsername和m_bPassword是登陆名和密码,是连接数据库的用户名和密码
love514425 2009-05-13
  • 打赏
  • 举报
回复
> 学习.
jiahehao 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 joanlynnlove 的回复:]
引用 2 楼 lessia 的回复:
可我没有在数据库里面没有设置用户啊,我自己登陆的时候也不需要密码。麻烦你能不能再说清楚点,我是一点也不懂。

是用的sql server吗?
如果是,你登陆数据库的时候采用的是windows 综合验证,要换成sql server 验证 什么的,反正就是另外一个要用户名和密码的验证方式
上网查查怎么修改登录方式
[/Quote]

正解。你登陆的时候不用密码,说明你安装sqlservie的时候,选的是windows验证,应该选另一项。
jssz103b 2009-05-13
  • 打赏
  • 举报
回复
string str_sql = "Driver={SQL Server};";
str_sql += "Server=" + ip + ";Database=" + dbname + ";User ID=" + name + ";PWD=" + pwd;
try
{
m_pConnection->Open(str_sql.c_str(),"","",adModeUnknown);
}
yinzhen 2009-05-13
  • 打赏
  • 举报
回复
現在大部分有adodb
yet_flash 2009-05-13
  • 打赏
  • 举报
回复
学习了~~~~~~~
qiufozhell 2009-05-13
  • 打赏
  • 举报
回复
上面的已经很清楚了
现在都用ADO了好像
以前的ODBO,老师不让用了

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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