五分钟学会 MFC ADO连接SQL Server实现CRUD

前言:

转载请附上连接,本帖原创请勿照抄。

    以前在自己刚开始写连接数据库的时候还是有好多不太清楚只是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();
}

下载链接https://download.csdn.net/download/qq_37529913/12530081

猜你喜欢

转载自blog.csdn.net/qq_37529913/article/details/106609705