ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
_ConnectionPtr接口返回一个记录集或一个空指针;_CommandPtr接口返回一个记录集;_RecordsetPtr是一个记录集对象。
(1)利用Connection对象的Execute方法执行SQL命令
_variant_t RecordsAffected;
m_pConnection->Execute("CREATE TABLE users(ID INTEGERusername TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected, dCmdText);
(2) 利用Command对象来执行SQL命令
m_pCommand->CommandText = "SELECT * FROM users";
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);//执行命令,取得记录集
一、配置数据库:
1、我的电脑 右击管理 服务和应用程序 SQLServer 配置管理 服务属性 登录身份内置账户 设为本地系统
2、打开 企业管理器(2005:SQL Server Management Studio) 右键属性 安全性 选择SQL Server和Windows身份验证模式; 安全性 登录名 启用sa登录并设置密码;重启服务器 断开连接 重新连接服务器。
二、数据库基本操作与程序实现
1、建立MFC的基于对话框应用程序
2、引入ADO库文件
使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
3、初始化OLE/COM库环境
ADO库是一组COM动态库,应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。
BOOL CMyAdoTestApp::InitInstance()
{
if(!AfxOleInit()){
AfxMessageBox(“OLE初始化出错!”);
return FALSE;
}
}
4、设计界面,并添加各按钮的响应函数,Listcontrol 属性:样式 查看 报告
5、添加连接数据库 的响应函数代码:
定义变量: _ConnectionPtr pConn;
try
{
if (FAILED(pConn.CreateInstance("ADODB.Connection")))
{
MessageBox("Create Instance failed!");
return;
}
CString strSRC;
strSRC="Driver=SQL Server;Server=(local);Database=Student;UID=sa;PWD=sa";
_bstr_t bstrSRC(strSRC);
if (FAILED(pConn->Open(bstrSRC,"","",-1)))
{
MessageBox("Can not open Database!");
pConn->Release();
return;
}
MessageBox("Connection database successfully!");
}
catch(_com_error e)
{
CString errorMsg;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
errorMsg.Format("%s",e.ErrorMessage());
MessageBox(errorMsg);
}
6、添加新建表 的响应函数代码:
CString strSQL="if exists (select name from sys.tables where name='stu') drop table stu;";
strSQL+="create table stu(id int,name char(10),grade int);";
_variant_t varSQL(strSQL);
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))
{
MessageBox("Can not create table!");
pConn->Release();
return;
}
MessageBox("create table successfully!");
7、 添加 插入数据 的响应函数代码:
try
{
UpdateData(true);
CString strSQL;
strSQL.Format("insert into Stu(StuID,StuName,StuAge,StuScore) values (%d,'%s',%d,%d)",m_ID,m_name,m_age,m_score);
_variant_t varSQL(strSQL);
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))
{
MessageBox("Can not insert!");
pConn->Release();
return;
}
MessageBox("insert recordset successfully!");
}
catch(_com_error e)
{
CString errorMsg;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
errorMsg.Format("%s",e.ErrorMessage());
MessageBox(errorMsg);
}
8、添加 查询 的响应函数代码:
try
{
UpdateData(true);
m_listctrl.DeleteAllItems();
while(m_listctrl.DeleteColumn(0));
_RecordsetPtr Rs1; //定义Recordset对象
CString strSQL;
strSQL.Format("select * from stu where StuName='%s'",m_name0);
_variant_t varSQL(strSQL),vID,vname;
CString strid;
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
Rs1=pConn->Execute(_bstr_t(varSQL),&vtOptional,-1);
if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))
{
MessageBox("Can not select!");
pConn->Release();
return;
}
FieldsPtr fPtrs=Rs1->GetFields();
for (int i=0;i<fPtrs->GetCount();i++)
{
FieldPtr fPtr= fPtrs->GetItem((long)i);
m_listctrl.InsertColumn(i,fPtr->GetName(),0,60);
}
int nCount=0;
while(!Rs1->adoEOF)
{
m_listctrl.InsertItem(nCount,"");
for (int i=0;i<fPtrs->GetCount();i++)
{
m_listctrl.SetItemText(nCount,i,(_bstr_t)Rs1->GetCollect(_variant_t((long)i)));
}
nCount++;
Rs1->MoveNext();
}
}
catch(_com_error e)
{
CString errorMsg;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
errorMsg.Format("%s",e.ErrorMessage());
MessageBox(bstrDescription);
}
_ConnectionPtr接口返回一个记录集或一个空指针;_CommandPtr接口返回一个记录集;_RecordsetPtr是一个记录集对象。
(1)利用Connection对象的Execute方法执行SQL命令
_variant_t RecordsAffected;
m_pConnection->Execute("CREATE TABLE users(ID INTEGERusername TEXT,old INTEGER,birthday DATETIME)",&RecordsAffected, dCmdText);
(2) 利用Command对象来执行SQL命令
m_pCommand->CommandText = "SELECT * FROM users";
m_pRecordset = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);//执行命令,取得记录集
一、配置数据库:
1、我的电脑 右击管理 服务和应用程序 SQLServer 配置管理 服务属性 登录身份内置账户 设为本地系统
2、打开 企业管理器(2005:SQL Server Management Studio) 右键属性 安全性 选择SQL Server和Windows身份验证模式; 安全性 登录名 启用sa登录并设置密码;重启服务器 断开连接 重新连接服务器。
二、数据库基本操作与程序实现
1、建立MFC的基于对话框应用程序
2、引入ADO库文件
使用ADO前必须在工程的stdafx.h头文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下所示:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
3、初始化OLE/COM库环境
ADO库是一组COM动态库,应用程序在调用ADO前,必须初始化OLE/COM库环境。在MFC应用程序里,在应用程序主类的InitInstance成员函数里初始化OLE/COM库环境。
BOOL CMyAdoTestApp::InitInstance()
{
if(!AfxOleInit()){
AfxMessageBox(“OLE初始化出错!”);
return FALSE;
}
}
4、设计界面,并添加各按钮的响应函数,Listcontrol 属性:样式 查看 报告
5、添加连接数据库 的响应函数代码:
定义变量: _ConnectionPtr pConn;
try
{
if (FAILED(pConn.CreateInstance("ADODB.Connection")))
{
MessageBox("Create Instance failed!");
return;
}
CString strSRC;
strSRC="Driver=SQL Server;Server=(local);Database=Student;UID=sa;PWD=sa";
_bstr_t bstrSRC(strSRC);
if (FAILED(pConn->Open(bstrSRC,"","",-1)))
{
MessageBox("Can not open Database!");
pConn->Release();
return;
}
MessageBox("Connection database successfully!");
}
catch(_com_error e)
{
CString errorMsg;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
errorMsg.Format("%s",e.ErrorMessage());
MessageBox(errorMsg);
}
6、添加新建表 的响应函数代码:
CString strSQL="if exists (select name from sys.tables where name='stu') drop table stu;";
strSQL+="create table stu(id int,name char(10),grade int);";
_variant_t varSQL(strSQL);
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))
{
MessageBox("Can not create table!");
pConn->Release();
return;
}
MessageBox("create table successfully!");
7、 添加 插入数据 的响应函数代码:
try
{
UpdateData(true);
CString strSQL;
strSQL.Format("insert into Stu(StuID,StuName,StuAge,StuScore) values (%d,'%s',%d,%d)",m_ID,m_name,m_age,m_score);
_variant_t varSQL(strSQL);
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))
{
MessageBox("Can not insert!");
pConn->Release();
return;
}
MessageBox("insert recordset successfully!");
}
catch(_com_error e)
{
CString errorMsg;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
errorMsg.Format("%s",e.ErrorMessage());
MessageBox(errorMsg);
}
8、添加 查询 的响应函数代码:
try
{
UpdateData(true);
m_listctrl.DeleteAllItems();
while(m_listctrl.DeleteColumn(0));
_RecordsetPtr Rs1; //定义Recordset对象
CString strSQL;
strSQL.Format("select * from stu where StuName='%s'",m_name0);
_variant_t varSQL(strSQL),vID,vname;
CString strid;
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
Rs1=pConn->Execute(_bstr_t(varSQL),&vtOptional,-1);
if (FAILED(pConn->Execute(_bstr_t(varSQL),&vtOptional,-1)))
{
MessageBox("Can not select!");
pConn->Release();
return;
}
FieldsPtr fPtrs=Rs1->GetFields();
for (int i=0;i<fPtrs->GetCount();i++)
{
FieldPtr fPtr= fPtrs->GetItem((long)i);
m_listctrl.InsertColumn(i,fPtr->GetName(),0,60);
}
int nCount=0;
while(!Rs1->adoEOF)
{
m_listctrl.InsertItem(nCount,"");
for (int i=0;i<fPtrs->GetCount();i++)
{
m_listctrl.SetItemText(nCount,i,(_bstr_t)Rs1->GetCollect(_variant_t((long)i)));
}
nCount++;
Rs1->MoveNext();
}
}
catch(_com_error e)
{
CString errorMsg;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
errorMsg.Format("%s",e.ErrorMessage());
MessageBox(bstrDescription);
}