C++连接SQL数据库分步骤进行
我们在进行C++连接SQL数据库的操作时,首先应该进行相应的系统配置,然后初始化C++与SQL连接,然后再进行数据连接的操作,然后应用SQL执行语言来具体操作。
C++连接SQL数据库第一步 系统配置
1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。
2.需要在ODBC中进行数据源配置,数据源选\”SQL SERVER”,登录方式使用“使用输入用户登录ID和密码的SQL SERVER验证”,并填写登录名(sa)和密码,注意一点,密码不能为空,这就意味着你的sa用户必须得有密码。否则无法通过系统本身的安全策略。测试通过就完成了配置。
C++连接SQL数据库第二步 C++与SQL连接初始化
1.在你所建立的C++项目中的stdafx.h头文件中引入ADO
具体代码如下
#import “c:\Program Files\Common Files\System\ado\msado15.dll” no_namespace rename(”EOF”, “adoEOF”) rename(”BOF”, “adoBOF”) 2.定义_ConnectionPtr变量后调用Connection对象的Open方法建立与服务器的连接。
数据类型_ConnectionPtr实际上是由类模板_com_ptr_t得到的一个具体的实例类。_ConnectionPtr类封装了Connection对象的Idispatch接口指针及其一些必要的操作。可以通过这个指针操纵Connection对象。
例如连接SQLServer数据库,代码如下:
//连接到MS SQL Server
//初始化指针
_ConnectionPtr pMyConnect = NULL;
HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
return;
//初始化链接参数
_bstr_t strConnect = “Provider=SQLOLEDB;
Server=hch;
Database=mytest;
uid=sa;
pwd=sa;”; //Database指你系统中的数据库
//执行连接
try
{
// Open方法连接字串必须四BSTR或者_bstr_t类型
pMyConnect->Open(strConnect, “”, “”, NULL);
}
catch(_com_error &e)
{
MessageBox(e.Description(), “警告”, MB_OK|MB_ICONINFORMATION);
}//发生链接错误
C++连接SQL数据库第三步 简单的数据连接
//定义_RecordsetPtr变量,调用它Recordset对象的Open,即可打开一个数据集
//初始化过程 以下是个实例
_RecordsetPtr pRecordset;
if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset))))
{
return;
}
//执行操作
try
{
pRecordset->Open(_variant_t(”userinfo”),
_variant_t((IDispatch*)pMyConnect), adOpenKeyset, adLockOptimistic, adCmdTable);
}
catch (_com_error &e)
{
MessageBox(”无法打开userinfo表\”, “系统提示”, MB_OK|MB_ICONINFORMATION);
}
C++连接SQL数据库第四步 执行SQL语句
这里是关键,我认为只要你懂点SQL语句那么一切都会方便许多比用上面的方法简单,更有效率点。
首先
m_pConnection.CreateInstance(_uuidof(Connection))
;
//初始化Connection指针
m_pRecordset.CreateInstance(__uuidof(Recordset));
//初始化Recordset指针
CString strSql=”select * from tb_goods”;//具体执行的SQL语句 m_pRecordset=m_pConnection->Execute(_bstr_t(strSql), NULL, adCmdText);//将查询数据导入m_pRecordset数据容器
至此 你的SQL语句已经执行完成了m_pRecordset内的数据就是你执行的结果。
取得记录:
while(!m_pRecordset->adoEOF)//遍历并读取name列的记录并输出
{
CString temp = (TCHAR *)(_bstr_t)m_pRecordset->GetFields()->GetItem (”name”)->Value; AfxMessageBox(temp);
access是什么意思啊了pRecordset->MoveNext();
}
插入记录:
//记得初始化指针再执行以下操作
CString strsql;
strsql.Format(”insert into tb_goods(no,name, price) values(’%d’,'%s’, %d)”,m_intNo,m_strName,m_intPrice);
m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText);
修改记录:
CString strsql;
strsql.Format(”update tb_goods set name=’%s’ , price=%d where no=%d “,m_strName,m_intPrice,m_intNo);
m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText);
删除记录:
CString strsql;
strsql.Format(”delete from tb_goodswhere no= ‘%d’ “,m_intNo); m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText);
以上是几个常用的SQL语句和执行方法。效率可能不是很高,不过很容易理解。如果你对SQL语句很熟悉那么可以更有效的执行查询直接获得需要的记录。C++连接SQL数据库的相关方法就为大家介绍到这里。
*******************************************************************************************
(楼上两位说的很对,我给你粘一篇文章吧 初学者 看看有好处。
需要的话 你可以留下邮箱 我这有一些初学者的文档可以发给你很不错,希望继续努力。面试,到时候一切都是是浮云。。。哈哈)
基本流程
万事开头难,任何一种新技术对于初学者来说最重要的还是“入门”,掌握其要点。让我们来看看ADO数据库开发的基本流程吧!
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
准备工作:
为了大家都能测试本文提供的例子,我们采用Access数据库,您也可以直接在我们提供的示例代码中到这个test.mdb。
下面我们将详细介绍上述步骤并给出相关代码。
【1】COM库的初始化
我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:
BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
......
【2】用#import指令引入ADO类型库
我们在stda
fx.h中加入如下语句:(stdafx.h这个文件哪里可以到?你可以在FileView中的Header Files里到)
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
几点说明:
(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
【3】创建Connection对象并连接数据库
首先我们需要添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉。
BOOL CADOTest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr))
{
hr = m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库
///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
在这段代码中我们是通过Connection对象的Open方法来进行连接数据库的,下面是该方法的原型
HRESULT Connection15::Open ( _bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options )
ConnectionString为连接字串,UserID是用户名, Password是登陆密码,Options是连接选项,用于指定Connection对象对数据的更新许可权,
Options可以是如下几个常量:
adModeUnknown:缺省。当前的许可权未设置
adModeRead:只读
adModeWrite:只写
adModeReadWrite:可以读写
adModeShareDenyRead:阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接
adModeShareExclusive:阻止其它Connection对象以读写权限打开连接
adModeShareDenyNone:阻止其它Connection对象以任何权限打开连接
我们给出一些常用的连接方式供大家参考:
(1)通过JET数据库引擎对ACCESS2000数据库的连接
m_pConnection- >Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown);
(2)通过DSN数据源对任何支持ODBC的数据库进行连接:
m_pConnection- >Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown);
(3)不通过DSN对SQL SERVER数据库进行连接:
m_pConnection- >Open("dr
iver={SQL Server};Server=127.0.0.1;DATABASE=vckbase;UID=sa;PWD=139","","",adModeUnknown);
其中Server是SQL服务器的名称,DATABASE是库的名称
Connection对象除Open方法外还有许多方法,我们先介绍Connection对象中两个有用的属性ConnectionTimeOut与State
ConnectionTimeOut用来设置连接的超时时间,需要在Open之前调用,例如:
m_pConnection- >ConnectionTimeout = 5;///设置超时时间为5秒
m_pConnection- >Open("Data Source=adotest;","","",adModeUnknown);
State属性指明当前Connection对象的状态,0表示关闭,1表示已经打开,我们可以通过读取这个属性来作相应的处理,例如:
if(m_pConnection- >State)
m_pConnection- >Close(); ///如果已经打开了连接则关闭它
------------------------------------------------------------------------------------
呵呵,是啊,我以前不做VC的,所以这次老板有个项目要做,没办法啊!!以后多请教啊!!
------------------------------------------------------------------------------------
你现在不少基础的不会,上来就连接数据库有点难
------------------------------------------------------------------------------------
要是你用vc6,就右健点击要添加变量的控件,选择classwizard,选择member variables选项卡,它会自动指到你想要添加变量的控件,你直接点选择add variable,起个名字就可以了
------------------------------------------------------------------------------------
我关键是不知道怎么给控件添加与之相对应的变量!!请明示啊!!
------------------------------------------------------------------------------------
CBaseEditBox是什么东西?你不要这样定义。应该先把控件放在对话框窗体上,再给这个控件添加与之相对应的变量,这样,VC就自动把控件和变量联系起来了
------------------------------------------------------------------------------------
刚弄,不怎么会,请明示!!!
我想把从数据库中读出来的记录放在一个文本框中!
然后在界面上放置了一个edit box
我在类C***Dlg中添加了变量
public:
CBaseEditBox m_list
接下来我在一个按钮的onOK事件里连接数据库并想把得到的记录放到m_list里
// 读入库中各字段并加入列表框中
while(!m_pRecordset- >adoEOF)
{
var = m_pRecordset- >GetCollect("UserName");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);
var = m_pRecordset- >GetCollect("Password");
if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_list.AddString( strName + " -- > "+strAge );
m_pRecordset- >MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
m_list.SetCurSel(0);
然后一大堆错误:
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list
"
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
TestADODlg.cpp
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2146: syntax error : missing "; " before identifier "m_list "
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "CBaseEditBox " : missing storage-class or type specifiers
d:\microsoft visual studio\myprojects\testado\testadodlg.h(18) : error C2501: "m_list " : missing storage-class or type specifiers
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2065: "m_list " : undeclared identifier
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(195) : error C2228: left of ".AddString " must have class/struct/union type
D:\Microsoft Visual Studio\MyProjects\TestADO\TestADODlg.cpp(201) : error C2228: left of ".SetCurSel " must have class/struct/union type
Error
请问什么原因那?
------------------------------------------------------------------------------------
www.vckbase/document/viewdoc/?id=496
把文章中连接Access的语句换成:
连接SQL数据库:
m_pConnection- >Open("Provider=SQLOLEDB.1;Server=192.168.1.6;DATABASE=mysql;UID=sa;PW
D=;","","",adModeUnknown);
其中Server是SQL服务器的名称,DATABASE是库的名称
******************************************************************************8
数据库名字:TEST,表名为student
数据库的用户名和密码为sa , 123
首先需在 stdafx.h 导入
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
添加按钮事件:
void CADODlg::OnSearch()
{
CoInitialize(NULL); //初始化COM
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
CString strSQL="select *from student";
_bstr_t bstrSRC(strSQL);
pConn->ConnectionString="Provider=MSDASQL;driver={SQL Server};Server=127.0.0.1;DATABASE=test;UID=sa;PWD=123";
pConn->Open("","","",-1); /*-1可用adConnectUnspecified代替,表示同步连接.adConnectAsync,表示异步。 如果是使用第二种连接字则应用 pConn->Open("","","642145",-1); */
pRst=pConn->Execute(bstrSRC,NULL,adCmdText);
while(!pRst->rsEOF)
{
m_result.AddString((_bstr_t)pRst->GetCollect("SName")); /*m_result是我关联的一个list空间变量*/
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
}
上面是用连接对象来执行sql语句的,我们也可以用command对象来实现,
首先添加command智能指针:
_CommandPtr pCmd(__uuidof(Command));
设置活动连接:
pCmd->put_ActiveConnection(_variant_t((IDispa
tch*)pConn));
设置命令文本:
pCmd->CommandText="select * from Student";
返回记录集:
pRst=pCmd->Execute(NULL,NULL,adCmdText);
***********************************************************************************8
1.首先,你的机器上要保证有sql server,并能正确进入并创建数据库,表等。
2.建议把那个SA的密码自己重新设定一下,设定方法:打开sql server 2005 SQL Server Management Studio,进去后在那个安全性--登录名--右键点击SA属性,设置密码,状态里面改成,授予 启用。
3.将ADO代码库引入到工程中,需要在stdafx.h或TEST.h(这个MFC项目的头文件)中添加如下代码,注意不同的操作系统在安装时这个路径可能不一样,所以必须先在系统中到msado15.dll文件的路径:
加入代码:
#import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF")
?
(通过以上代码就可以将ADO代码库引入到当前工程中)
?
4.在TEST工程中的TEST.h中加入如下代码:(蓝为所加入的)
class CSQL_TESTApp : public CWinApp
{
public:
?
?_ConnectionPtr m_pAppConn;?//连接对象指针
CString m_AppConnString;?//连接字符串的声明
bool m_bConnected; //连接标志
public:
CSQL_TESTApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSQL_TESTApp)
public:
virtual BOOL InitInstance();
。
。。。
};
?
5.在TEST工程的TEST.CPP文件中加入如下代码:(蓝为所加入的)
BOOL CSQL_TESTApp::InitInstance()
{
AfxEnableControlContainer();
?
HRESULT hRes;
try
{
hRes=m_pAppConn.CreateInstance(_T("ADODB.Connection"));
m_pAppConn->Open(_bstr_t((LPCTSTR) m_AppConnString) , _T("") , _T("") , adModeUnknown);
if(SUCCEEDED(hRes))
{
m_bConnected = TRUE; //连接成功设置标志位
}
}
catch(_com_error e)
{
CString errormessage;
errormessage.FormatMessage(_T("连接数据库失败 %s"),e.ErrorMessage());
AfxMessageBox(errormessage); //显示错误信息
return FALSE;
?}
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
?
*****************************************************************************
Visual C++用ADO连接SQL Server数据库语句
1.ADO连接SQL Server数据库Connection语句:"Provider=SQLOLEDB.1;Data Source=serverName;Initial Catalog=databaseName;User ID=user;Password=userPassWord;"
其中serverName:SQL Server的名字,本地的默认为(local),注意:local两边是有“(”,“)”的;
databaseName:要连接的SQL Server数据库的名字,如abc;
user:为用 SQL Server 的用户名称,默认为sa;
userPassWord: SQL Server用户密码,默认为空(但是不提倡)
2.例如:
try //try{...}catch(...){...}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论