求大神帮忙啊,帮忙看下visual C++连接SQL数据库代码哪里出错了

时间:2021-11-22 05:01:11
我新建了个SQL server数据库,库中有个student的表,想要用Visual C++ ADO技术连接这个student,

1、导入ADO类型库。
在Stdafx.h的头文件添加
#import "C:\Program Files\Common Files\System\ado\msado15.dll" 
no_namespace,rename("EOF","adoEOF")
2、初始化COM环境
CADOApp::InitInstance()函数添加
CoInitialize(NULL);
3,添加变量
在类CMyDld类添加代码

_ConnectionPtr m_pConnection;
_ConmandPtr m_pConmand;
_RecordsetPtr m_pRecordset;


4、连接数据库
CADODlg::OnInitDialog()函数添加代码:
 HRESULT hr;
try
{
hr=m_pConnection.CreateInstance("ADBDB.Connection");
if(SUCCEEEDED(hr))
{
hr=m_pConnection->Open(_bstr_("Provide=SQLOLEDB;server=temp;database=student;"),_bstr_("sa"),_bstr_(""),-1);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\t错误信息:%s,e.ErrorMessage());
AfxMessageBox(errormessage);
}

运行的时候一直出现很多错误。
求大神帮我解决为什么有错误


8 个解决方案

#1


database=student;

student是某个数据库中的某个表
另外,user和passwd呢?

#2


hr=m_pConnection->Open(_bstr_("Provide=SQLOLEDB;server=temp;database=student;"),_bstr_("sa"),_bstr_(""),-1);

我建了个数据库名为C++,表中有这个student表.
我还是不理解这句连接数据库的语句,一些参数都不知道是做什么的?应该怎么赋值?
我还有一个疑问,连接一个数据库.怎么都不用把它那个硬盘的地址给打出来呢?

#3


hr=m_pConnection->Open(_bstr_("Provide=SQLOLEDB

#4


先用查询分析器连接通。

#5


不还意思啊,我不懂你的意思,能不能说具体一点啊

#6


int DBConnect::Open(LPCSTR strDstAddress,LPCSTR strUsername,LPCSTR strPassword,LPCSTR strDBName)
{
_strDstAddress = strDstAddress;
_strDBName = strDBName;
_strUsername = strUsername;
_strPassword = strPassword;

HRESULT comhr = ::CoInitialize(NULL);
if(FAILED(comhr))
{
return -1;
}
HRESULT  hr = _connection_ptr.CreateInstance(__uuidof(Connection));

if(FAILED(hr))
{
return -1;
}
char szSQL[SQL_BUFFER_LEN]={0};
memset(szSQL,0,SQL_BUFFER_LEN);
sprintf(szSQL,"Driver={SQL SERVER};Server=%s;DATABASE=%s",strDstAddress,strDBName);
// sprintf(szSQL,"Driver={SQL SERVER};Data Source=%s;Initial Catalog=%s",strDstAddress,strDBName);
try
{
//连接到服务器上数据库
_connection_ptr->Open(szSQL,strUsername,strPassword,adModeUnknown);
if(FAILED(hr))
{
return -1;
}
}
catch(_com_error &err)
{
TRACE(_T("数据库操作失败!错误信息:%s,文件:%s,行:%d.\n"),err.ErrorMessage(),__FILE__,__LINE__);
AfxMessageBox(err.Description());
return -1;
}
m_bDBOpen = TRUE;
return 0;
}




我是这么写的。你可以参考一下。

#7


好的,谢谢。我试试看能不能行,如果有问题的话,还请您多多指教啊

#8


 m_pConnect->Open("Provider=SQLOLEDB;Data Source=服务器服务器服务器服务器;Initial Catalog=数据数据数据数据库库库库;","sa","123456",-1);   

http://wenku.baidu.com/view/ffa42ff90242a8956bece48c.html

#1


database=student;

student是某个数据库中的某个表
另外,user和passwd呢?

#2


hr=m_pConnection->Open(_bstr_("Provide=SQLOLEDB;server=temp;database=student;"),_bstr_("sa"),_bstr_(""),-1);

我建了个数据库名为C++,表中有这个student表.
我还是不理解这句连接数据库的语句,一些参数都不知道是做什么的?应该怎么赋值?
我还有一个疑问,连接一个数据库.怎么都不用把它那个硬盘的地址给打出来呢?

#3


hr=m_pConnection->Open(_bstr_("Provide=SQLOLEDB

#4


先用查询分析器连接通。

#5


不还意思啊,我不懂你的意思,能不能说具体一点啊

#6


int DBConnect::Open(LPCSTR strDstAddress,LPCSTR strUsername,LPCSTR strPassword,LPCSTR strDBName)
{
_strDstAddress = strDstAddress;
_strDBName = strDBName;
_strUsername = strUsername;
_strPassword = strPassword;

HRESULT comhr = ::CoInitialize(NULL);
if(FAILED(comhr))
{
return -1;
}
HRESULT  hr = _connection_ptr.CreateInstance(__uuidof(Connection));

if(FAILED(hr))
{
return -1;
}
char szSQL[SQL_BUFFER_LEN]={0};
memset(szSQL,0,SQL_BUFFER_LEN);
sprintf(szSQL,"Driver={SQL SERVER};Server=%s;DATABASE=%s",strDstAddress,strDBName);
// sprintf(szSQL,"Driver={SQL SERVER};Data Source=%s;Initial Catalog=%s",strDstAddress,strDBName);
try
{
//连接到服务器上数据库
_connection_ptr->Open(szSQL,strUsername,strPassword,adModeUnknown);
if(FAILED(hr))
{
return -1;
}
}
catch(_com_error &err)
{
TRACE(_T("数据库操作失败!错误信息:%s,文件:%s,行:%d.\n"),err.ErrorMessage(),__FILE__,__LINE__);
AfxMessageBox(err.Description());
return -1;
}
m_bDBOpen = TRUE;
return 0;
}




我是这么写的。你可以参考一下。

#7


好的,谢谢。我试试看能不能行,如果有问题的话,还请您多多指教啊

#8


 m_pConnect->Open("Provider=SQLOLEDB;Data Source=服务器服务器服务器服务器;Initial Catalog=数据数据数据数据库库库库;","sa","123456",-1);   

http://wenku.baidu.com/view/ffa42ff90242a8956bece48c.html