vs2010下的C++MFC基于对话框程序如何连接数据库

时间:2021-05-28 21:50:59
vs2010下的C++MFC基于对话框程序可以连接SQL2008的数据库吗?怎么连接法?

14 个解决方案

#1


连接数据库与项目的类型无关的,无论是多文档,单文档甚至是命令行方式,都可以连接数据库的
一般情况下,可用ADO,在你的XXXDlg.cpp头上加
#import "x:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
给你以前我的一段测试程序参考(仅供参考):

void CTestdbDlg::OnButton2() 
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
m_pConnection->ConnectionTimeout = 8;
   TRACE("%s\n",m_sConn);
try{

       hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=Server","","",adModeUnknown);
if (FAILED(hr))
        {
            AfxMessageBox("不能连接数据库!");
            return ;
        }
else
AfxMessageBox("连接数据库成功!");
    }
    catch(_com_error e)
    {
        AfxMessageBox("不能打开数据库!");
        return ;
    }


}

要注意是的,我的项目是多字符集的(非unicode),你的字串前要加_T()

#2


引用 1 楼 keiy 的回复:
连接数据库与项目的类型无关的,无论是多文档,单文档甚至是命令行方式,都可以连接数据库的
一般情况下,可用ADO,在你的XXXDlg.cpp头上加
#import "x:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
给你以前我的一段测试程序参考(仅供参考):

……

请问,你留给我的答复中TRACE("%s\n",m_sConn);
的m_sConn是什么类型的定义啊?

#3


不好意思,那是我从两段程序提取时搞错了,这个应该没有
原来是连接oracle的连接串
CString m_sConn;//="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521)) )(CONNECT_DATA = (SID = ora8)))\"";
m_sConn.Format("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = 1521)) )(CONNECT_DATA = (SID = %s)))\"",strPWD,strUID,strIP,strDB);
  TRACE("%s\n",m_sConn);

#4


引用 3 楼 keiy 的回复:
不好意思,那是我从两段程序提取时搞错了,这个应该没有
原来是连接oracle的连接串
CString m_sConn;//="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = ……

这个看得我好晕。。。
究竟哪个是正确的啊?可以在发一次吗?

#6


我#1的,去掉TRACE("%s\n",m_sConn);
就应该是正确的
你也可参考LS的

#7


引用 6 楼 keiy 的回复:
我#1的,去掉TRACE("%s\n",m_sConn);
就应该是正确的
你也可参考LS的

hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=ChaoShiWang_2;Integrated Security=True;Data Source=(local)","","",adModeUnknown);
我把你上面的字符串改为这个,但是程序运行的结果老是“不能打开数据库!”
是我上面的字符串定义错了吗?

#8


引用 5 楼 dic_008 的回复:
http://blog.csdn.net/dic_008/article/details/6913715
使用ADO连接数据库

看得好晕。。。。

#9


hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=ChaoShiWang_2;Integrated Security=True;Data Source=(local)","","",adModeUnknown);
你的用户名/口令呢?
我的用户名是sa,空口令
另外Data Source=(local),一般没()的,且如是本地,要么localhost,要么是127.0.0.1

#11


引用 9 楼 keiy 的回复:
hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=ChaoShiWang_2;Integrated Security=True;Data Source=(local)","","",adModeUnknown);
你的用户名/口令呢?
我的用户名是sa,空口令
另……

integrated security=true 的意思是集成验证,也就是说使用Windows验证的方式去连接到数据库服务器。这样方式的好处是不需要在连接字符串中编写用户名和密码
这是我从网上找的,而且我自己用C#也是这样连接数据库的。只是不知道怎么应用在MFC里面

#12


该回复于2011-11-17 09:04:56被版主删除

#13


引用 10 楼 keiy 的回复:
另外,2008的连接串参考
http://wenku.baidu.com/view/551fb613cc7931b765ce156d.html

可以告诉我你的QQ吗?我想向你虚心请教

#14


请问hr是什么?为什么代码运行错误,提示:未声明的标识符

#1


连接数据库与项目的类型无关的,无论是多文档,单文档甚至是命令行方式,都可以连接数据库的
一般情况下,可用ADO,在你的XXXDlg.cpp头上加
#import "x:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
给你以前我的一段测试程序参考(仅供参考):

void CTestdbDlg::OnButton2() 
{
// TODO: Add your control notification handler code here
// TODO: Add your control notification handler code here
_ConnectionPtr m_pConnection;
m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
m_pConnection->ConnectionTimeout = 8;
   TRACE("%s\n",m_sConn);
try{

       hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=master;Data Source=Server","","",adModeUnknown);
if (FAILED(hr))
        {
            AfxMessageBox("不能连接数据库!");
            return ;
        }
else
AfxMessageBox("连接数据库成功!");
    }
    catch(_com_error e)
    {
        AfxMessageBox("不能打开数据库!");
        return ;
    }


}

要注意是的,我的项目是多字符集的(非unicode),你的字串前要加_T()

#2


引用 1 楼 keiy 的回复:
连接数据库与项目的类型无关的,无论是多文档,单文档甚至是命令行方式,都可以连接数据库的
一般情况下,可用ADO,在你的XXXDlg.cpp头上加
#import "x:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
给你以前我的一段测试程序参考(仅供参考):

……

请问,你留给我的答复中TRACE("%s\n",m_sConn);
的m_sConn是什么类型的定义啊?

#3


不好意思,那是我从两段程序提取时搞错了,这个应该没有
原来是连接oracle的连接串
CString m_sConn;//="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.115)(PORT = 1521)) )(CONNECT_DATA = (SID = ora8)))\"";
m_sConn.Format("Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;User ID=%s;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = %s)(PORT = 1521)) )(CONNECT_DATA = (SID = %s)))\"",strPWD,strUID,strIP,strDB);
  TRACE("%s\n",m_sConn);

#4


引用 3 楼 keiy 的回复:
不好意思,那是我从两段程序提取时搞错了,这个应该没有
原来是连接oracle的连接串
CString m_sConn;//="Provider=OraOLEDB.Oracle.1;Password=test;Persist Security Info=True;User ID=test;Data Source=\"(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = ……

这个看得我好晕。。。
究竟哪个是正确的啊?可以在发一次吗?

#5


#6


我#1的,去掉TRACE("%s\n",m_sConn);
就应该是正确的
你也可参考LS的

#7


引用 6 楼 keiy 的回复:
我#1的,去掉TRACE("%s\n",m_sConn);
就应该是正确的
你也可参考LS的

hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=ChaoShiWang_2;Integrated Security=True;Data Source=(local)","","",adModeUnknown);
我把你上面的字符串改为这个,但是程序运行的结果老是“不能打开数据库!”
是我上面的字符串定义错了吗?

#8


引用 5 楼 dic_008 的回复:
http://blog.csdn.net/dic_008/article/details/6913715
使用ADO连接数据库

看得好晕。。。。

#9


hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=ChaoShiWang_2;Integrated Security=True;Data Source=(local)","","",adModeUnknown);
你的用户名/口令呢?
我的用户名是sa,空口令
另外Data Source=(local),一般没()的,且如是本地,要么localhost,要么是127.0.0.1

#10


#11


引用 9 楼 keiy 的回复:
hr = m_pConnection->Open("Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=ChaoShiWang_2;Integrated Security=True;Data Source=(local)","","",adModeUnknown);
你的用户名/口令呢?
我的用户名是sa,空口令
另……

integrated security=true 的意思是集成验证,也就是说使用Windows验证的方式去连接到数据库服务器。这样方式的好处是不需要在连接字符串中编写用户名和密码
这是我从网上找的,而且我自己用C#也是这样连接数据库的。只是不知道怎么应用在MFC里面

#12


该回复于2011-11-17 09:04:56被版主删除

#13


引用 10 楼 keiy 的回复:
另外,2008的连接串参考
http://wenku.baidu.com/view/551fb613cc7931b765ce156d.html

可以告诉我你的QQ吗?我想向你虚心请教

#14


请问hr是什么?为什么代码运行错误,提示:未声明的标识符