前言:
转载请附上连接,本帖原创请勿照抄。
以前在自己刚开始写连接数据库的时候还是有好多不太清楚只是CTRL C AND CTRL V 直接进行复制粘贴,然后慢慢一个一个教程的对着看,慢慢对着调,什么都不明白 只要实现功能就可以了~ 最近总结总结数据库相关的内容进行 总结发布。
今天这章MFC 连接SQL Server的文章先发一下具体实现,最近在打磨关于数据库的文章 让大家不太清楚 不太明白 或者回顾一下 系统的进行一下 数据库这方面的知识。这些文章还在打磨当中稍等几天可能会放出来 作者也在尝试着使用别的方法来写文章 现在的编辑器写出来的文档可能 没有那么的 花(都)里(是)胡(眼)哨(泪) 的功能 让大家看着更加的美观,希望大家可以多点点关注,支持一下作者。
接下来为大家写完整实现的代码,简洁明了、直接了当。(有问题请留言看到会回复)
VS2017(C++项目、MFC、其他类型项目代码都可以直接拷过去把MFC的弹窗、类型换一下就可以了)
大家都明白连接数据库要写 "连接字符串" 然后在连接数据库 常用的两种方式就是ADO 还有 ODBC数据源 还有OLDB方式连接数据库
引入msado15.dll (默认msado15.dll所在路径如果一直提示找不到路径请把msado15.dll单独拷出来放Debug或Release目录下)
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#include <afxdisp.h> // MFC 自动化类
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
连接数据库过程
1 .h文件 COM指针赋值变量 _ConnectionPtr m_pCon;
2 .cpp 初始化组件 ::CoInitialize(NULL);//初始化数据库连接
3 初始化指针 m_pCon.CreateInstance(__uuidof(Connection));
4 编写数据库连接语句
5 开始编写SQL执行
.h文件定义初始化
扫描二维码关注公众号,回复:
11309795 查看本文章
//引入需要的头文件
#pragma once
#include <afx.h>
#include <afxdisp.h>
#include <comdef.h>
#include <VECTOR>
#import "msado15.dll" no_namespace rename("EOF","adoEOF")
//初始化定义
public:
//指针
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRec;
_CommandPtr m_pCmd;
int ADOTest();
//尾
BOOL adoEOF() { return m_pRec->adoEOF; }
//向下移动一条记录
void MoveNext() { m_pRec->MoveNext(); }
//List列表控件变量
CListBox M_ListBox;
/*
*MFC界面设置两个BUT按钮 两个编辑框
*/
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
afx_msg void OnEnChangeEdit1();
afx_msg void OnEnChangeEdit2();
.cpp实现连接数据库 并实现增删改查功能
//连接数据库
void CSQLUpgradeDlg::OnBnClickedButton1()
{
CString StrUser = "", StrPWD = "", strCmd = "";
GetDlgItem(IDC_EDIT1)->GetWindowText(StrUser);
GetDlgItem(IDC_EDIT2)->GetWindowText(StrPWD);
if (StrUser == "" || StrPWD == "")
{
AfxMessageBox("用户名或密码为空");
return;
}
::CoInitialize(NULL);//初始化数据库连接
m_pCon.CreateInstance(__uuidof(Connection));
m_pRec.CreateInstance(__uuidof(Recordset));
try {
//使用ADO连接字符串开头应该是SQLOLEDB.1 ODBC方式字符串开头应该是DNS
strCmd = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" + StrUser + ";Password=" + StrPWD + ";Initial Catalog =数据库名; Data Source = 计算机全名\\实例名";
m_pCon->ConnectionString = (_bstr_t)strCmd;
m_pCon->Open("", "", "", adConnectUnspecified);
}
catch (_com_error e) {
CString error_message;
error_message.Format(TEXT("连接数据库失败 !\r\n 错误信息:%s(%ld)"), e.ErrorMessage(), e.Error());
M_ListBox.AddString(error_message);
return;
}
ADOTest();
GetDlgItem(ID_WIZNEXT)->EnableWindow(FALSE);}
.cpp实现连接数据库 并实现增删改查功能
int CSQLUpgradeDlg::ADOTest()
{
// strCmd SQL语句
CString strCmd = "";
//添加
try
{
strCmd.Format("INSERT INTO SQLTest values(100, '张三', '增')");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
strCmd.Format("INSERT INTO SQLTest values(200, '李四', '删')");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
strCmd.Format("INSERT INTO SQLTest values(300, '王五', '改')");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
strCmd.Format("INSERT INTO SQLTest values(400, '赵六', '查')");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
M_ListBox.AddString("添加:张三、李四、王五、赵六");
}
catch (_com_error e) {
M_ListBox.AddString("执行添加失败");
}
//删除
try
{
strCmd.Format("delete from SQLTest where T_ID=200");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
M_ListBox.AddString("删除:李四");
}
catch (_com_error e) {
M_ListBox.AddString("执行删除操作失败");
}
//修改
try
{
strCmd.Format("update SQLTest set T_Value='修改成功' where T_ID=300");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
M_ListBox.AddString("修改:王五 Value=修改成功");
}
catch (_com_error e) {
M_ListBox.AddString("执行修改操作失败");
}
//查询
try
{
strCmd.Format("select * from SQLTest where T_ID=400");
m_pRec = m_pCon->Execute(_bstr_t(strCmd), NULL, adCmdText);
while (!m_pRec->adoEOF)//遍历并读取name列的记录并输出
{
CString temp = (TCHAR *)(_bstr_t)m_pRec->GetFields()->GetItem("T_Value")->Value;
//AfxMessageBox(temp);
m_pRec->MoveNext();
}
M_ListBox.AddString("添加:赵六 Value=查");
}
catch (_com_error e) {
M_ListBox.AddString("执行修改查询失败");
//CString error_message;
//error_message.Format(TEXT("查询失败..."), e.ErrorMessage(), e.Error());
//AfxMessageBox(error_message);
}
return 0;}
最后一步进行关闭
void CSQLUpgradeDlg::OnBnClickedButton2()
{
m_pCon.Release();
m_pRec.Release();
CoUninitialize();
OnOK();
}