MFC使用ado连接SQLserver
做个小工具,记录MFC中用ado连接sqlserver2008的简要步骤。
首先建了个对话框工程,编辑好如下界面: 注意:要把ListControl的View属性设置成Report。 首先,引入ADO库文件。在StdAfx.h头文件中添加如下一行: #import "C://Program Files//Common Files//System//ado//msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
然后自定义数据库类,如AdoSql class AdoSql
{
public:
AdoSql();
virtual ~AdoSql();
void InitialConn(); //连接数据库
void ExitConn(); //断开数据库
void GetRecordSet(CString bstrSqlCmd); //获得记录集
void ExcuteCmd(CString bstrSqlCmd); //执行sql语句
public:
_bstr_t m_bstrConn; //存储连接数据库的字符串
_bstr_t m_sqlCmd; //存储sql语句
_ConnectionPtr m_pConnection; //连接数据库对象指针
_RecordsetPtr m_pRecordSet; //数据集对象指针
};
各个成员函数的实现直接贴代码吧。 AdoSql::AdoSql()
{
m_pConnection = NULL;
m_pRecordSet = NULL;
InitialConn();
}
AdoSql::~AdoSql()
{
}
void AdoSql::InitialConn()
{
//初始化COM组件
::CoInitialize(NULL);
HRESULT hr = NULL;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象
//hr = m_pConnection.CreateInstance(__uuidof(Connection));作用同上
//1、新建一个文件,名字任意取,后缀名必须为udl(如何hello.udl)
//2、双击hello.udl文件,进入数据连接属性面板,填写好数据源(选择自己创建的数据源名字的)
//3、再以记事本方式打开,第三行的数据就是连接字符
//m_bstrConn = "Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;User ID=sa;Password=123456;Initial Catalog=WORK;Data Source="";Initial File Name="";Server SPN=""";
m_bstrConn = "Provider=SQLNCLI10.1;Integrated Security="";Persist Security Info=False;Initial Catalog=WORK;Data Source="";Initial File Name="";Server SPN=""";
hr = m_pConnection->Open(m_bstrConn,"sa","123456",adModeUnknown);
if (!SUCCEEDED(hr)) {
AfxMessageBox("连接数据库失败");
}
}
catch (_com_error e)
{
CString strErr;
strErr.Format("连接数据库失败n%s",e.ErrorMessage());
AfxMessageBox(strErr);
}
}
void AdoSql::GetRecordSet(CString bstrSqlCmd)
{
m_sqlCmd = _bstr_t(bstrSqlCmd);
//创建记录集指针对象实例
m_pRecordSet.CreateInstance(__uuidof(Recordset));
//打开记录集
m_pRecordSet->Open(m_sqlCmd,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
void AdoSql::ExcuteCmd(CString bstrSqlCmd)
{
m_sqlCmd = _bstr_t(bstrSqlCmd);
_variant_t RecordsAffected;
try{
m_pRecordSet = m_pConnection->Execute(m_sqlCmd,&RecordsAffected,adCmdText);
}
catch(_com_error e) {
AfxMessageBox(e.ErrorMessage());
}
}
void AdoSql::ExitConn()
{
//关闭记录集和连接
if (m_pRecordSet != NULL)
{
m_pRecordSet->Close();
}
m_pConnection->Close();
::CoUninitialize();
}
在对话框类里定义了一个显示数据到ListControl控件的函数 void CAdoSqlserverDlg::DispData()
{
adoSql.GetRecordSet("select * from course");
//初始化数据表
m_List.SetExtendedStyle(m_List.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//先清空数据表
m_List.DeleteAllItems();
m_List.InsertColumn(0,"课程编号",LVCFMT_LEFT,100);
m_List.InsertColumn(1,"课程名称",100);
m_List.InsertColumn(2,"课程简称",100);
m_List.InsertColumn(3,"班级编号",100);
int i = 0;
while(!adoSql.m_pRecordSet->adoEOF)
{
m_List.InsertItem(i,"");
m_List.SetItemText(i,0,(char*)(_bstr_t)adoSql.m_pRecordSet->GetCollect("课程编号"));
m_List.SetItemText(i,1,(char*)(_bstr_t)adoSql.m_pRecordSet->GetCollect("课程名称"));
m_List.SetItemText(i,2,(char*)(_bstr_t)adoSql.m_pRecordSet->GetCollect("课程简称"));
m_List.SetItemText(i,3,(char*)(_bstr_t)adoSql.m_pRecordSet->GetCollect("班级编号"));
adoSql.m_pRecordSet->MoveNext();
i++;
}
adoSql.ExitConn();
}
因为我希望打开对话框就显示数据,所以在BOOL CAdoSqlserverDlg::OnInitDialog()函数中我就调用了这个显示函数。 接下来一次编辑界面上4个按钮的响应函数 void CAdoSqlserverDlg::OnButtonAdd()
{
// TODO: Add your control notification handler code here
UpdateData();
if (m_edit1=="" || m_edit2=="" || m_edit3=="" || m_edit4=="") {
MessageBox("输入数据不完整!");
return;
}
CString strCmd;
strCmd.Format("insert into course values('%s','%s','%s')",m_edit1,m_edit2,m_edit3,m_edit4);
adoSql.InitialConn();
adoSql.ExcuteCmd(strCmd);
DispData();
}
2、修改按钮: void CAdoSqlserverDlg::OnButtonModify()
{
// TODO: Add your control notification handler code here
UpdateData();
if (m_edit1=="" || m_edit2=="" || m_edit3=="" || m_edit4=="") {
MessageBox("输入数据不完整!");
return;
}
CString strCmd;
strCmd.Format("update course set 课程编号='%s',课程名称='%s',课程简称='%s',班级编号='%s' where 课程编号='%s'",m_edit4,m_selectCourseSN);
adoSql.InitialConn();
adoSql.ExcuteCmd(strCmd);
DispData();
}
3、删除按钮: void CAdoSqlserverDlg::OnButtonDelete()
{
// TODO: Add your control notification handler code here CString strCmd;
strCmd.Format("delete from course where 课程编号='%s'",m_selectCourseSN); adoSql.InitialConn(); adoSql.ExcuteCmd(strCmd); DispData(); }
4、清空按钮: void CAdoSqlserverDlg::OnButtonClear()
{
// TODO: Add your control notification handler code here
CString strCmd;
strCmd.Format("delete from course",m_selectCourseSN);
adoSql.InitialConn();
adoSql.ExcuteCmd(strCmd);
DispData();
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |