C++连接本地SQL数据库

来源:互联网 发布:eclipse编写java程序 编辑:程序博客网 时间:2024/05/22 14:51

注:以下代码在VS 2013中实现,其他VS版本亦适用。

1、引入ADO文件。在 stdafx.h 文件末尾(通常在末尾)添加以下代码:

#import "C:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")

//这是引入 msado15.dll 这个文件,Windows的路径通常是这个,不排除有例外

2、初始化COM库。在程序入口,即(xxx代表项目名) xxxDlg.cpp 文件中 BOOL CxxxDlg::OnInitDialog() 函数中添加以下代码。通常从“在此添加额外的初始化代码”后面添加:

::CoInitialize(0);   //前面的双冒号( :: )叫域作用符。若前面是空白,表示其后的函数是系统函数。

3、创建Connection对象并连接数据库(还是在 OnInitDialog() 中),并执行SQL语句。我个人喜欢先 .h 文件中定义,在 .cpp 文件中使用:

定义:

<span style="white-space:pre"></span>_ConnectionPtr pConnection;_RecordsetPtr pRecordset;_variant_t vID, vName;

使用,代码中有根据情况改的地方(汉字):

<span style="white-space:pre"></span>pConnection.CreateInstance("ADODB.Connection");   //可接着初始化COM的代码编写。pConnection->Open("Provider=SQLOLEDB; Server=服务器名; Database=数据库名; uid=sa; pwd=sa的密码", "", "", adModeUnknown);pRecordset.CreateInstance("ADODB.Recordset");pRecordset->Open("select * from 表名", _variant_t((IDispatch *)pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);

读取并显示在 list Control 中,我这里的表中只有两列数据,视情况添加删除:

<span style="white-space:pre"></span>m_listCon.InsertColumn(0, _T("编号(ID)"), LVCFMT_CENTER, 120, 2);m_listCon.InsertColumn(1, _T("姓名(NAME)"), LVCFMT_CENTER, 130, 2);UpdateData(FALSE);int i = 0;while (!pRecordset->adoEOF){vID = pRecordset->GetCollect("ID");vName = pRecordset->GetCollect("NAME");m_ID = (CString)vID;m_Name = (CString)vName;dataList.push_back(userinfo(m_ID, m_Name));m_listCon.InsertItem(i, m_ID);m_listCon.SetItemText(i++, 1, m_Name);pRecordset->MoveNext();}

操作,大体是这样,具体的根据表的情况更改。m_ID,m_Name是我的输入框的空间取值变量:

<span style="white-space:pre"></span>UpdateData(TRUE);CString str1;str1.Format(_T("insert into student(ID, NAME) values('%s', '%s')"), m_ID, m_Name);pConnection->Execute(_bstr_t(str1), NULL, adCmdText);CString str2;str2.Format(_T("update student set NAME = '%s' where ID = '%s'"), m_Name, m_ID);pConnection->Execute(_bstr_t(str2), NULL, adCmdText);<span style="white-space:pre"></span>CString str3;str3.Format(_T("delete student where ID = '%s'"), m_ID);pConnection->Execute(_bstr_t(str3), NULL, adCmdText);




0 0
原创粉丝点击