创建数据库
创建如下数据库
dbo.S
dbo.C
dbo.SC
注意:需要创建一个txt,并把后缀改为udl,右键属性,连接你创建的数据库,测试连接后,改回txt,获取其中字符串。
MFC连接数据库
创建MFC项目->基于对话框
这里创建的项目名称为Test
在 stdafx.h 添加以下代码:
#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF" , "adoEOF") rename("BOF", "adoBOF")
注意要在一行内,分多行需在行末加 " \ "
在 Test.h 中的 public 添加以下代码:
_ConnectionPtr m_pCon;
BOOL ConnectDataBase(CString strLinkWord);
在 Test.cpp 中的 InitInstance() 函数添加以下代码:
CString strLinkWord = L"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=StudentManagement;Data Source=DESKTOP-EDQ3AKC";
if (!ConnectDataBase(strLinkWord))
{
return FALSE;
}
AfxMessageBox(L"Succeedly!");
strLinkWord中的字符串即为你从udl中获取的字符串
并如图中添加dlg.m_pCon = m_pCon;
来传递指针
注意需在TestDlg.h 中先定义指针,不然会提示不存在m_pCon
我们之前声明了ConnectDataBase()函数,现在来定义它,在Test.cpp任意位置添加以下代码:
BOOL CTestApp::ConnectDataBase(CString strLinkWord)
{
// TODO: 在此处添加实现代码.
::CoInitialize(NULL);
if (!SUCCEEDED(m_pCon.CreateInstance(__uuidof(Connection))))
{
m_pCon = NULL;
TRACE("Failed!");
}
ASSERT(m_pCon != NULL);
try
{
return SUCCEEDED(m_pCon->Open(_bstr_t(strLinkWord), _bstr_t(L""), _bstr_t(L""), adModeUnknown));
}
catch (_com_error & e)
{
CString str;
str.Format(L"%s\n", e.ErrorMessage());
AfxMessageBox(str);
return FALSE;
}
}
注意CTestApp改为你自己创建项目的名字
在 TestDlg.h 中的 public 添加以下代码:
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRec;
_RecordsetPtr DBRecordSetGet(LPCTSTR Sql);
BOOL GetCollect(LPCTSTR Name,_variant_t& OutCol);
CString m_sno;//学号
CString m_pw;//密码
如果指针m_pCon在之前那步定义了,这里就不用重复定义
先在 TestDlg.cpp 中定义声明的两个函数:
_RecordsetPtr CTestDlg::DBRecordSetGet(LPCTSTR Sql)
{
// TODO: 在此处添加实现代码.
m_pRec.CreateInstance("ADODB.Recordset");
m_pRec = m_pCon->Execute((_bstr_t)Sql, NULL, adCmdText);
return m_pRec;
//return _RecordsetPtr();
}
BOOL CTestDlg::GetCollect(LPCTSTR Name, _variant_t& OutCol)
{
// TODO: 在此处添加实现代码
_variant_t vt;
vt = m_pRec->GetCollect(Name);
if (vt.vt != VT_NULL) {
OutCol = vt;
return TRUE;
}
else
return FALSE;
}
在对话框中添加2个 Edit Control
双击确定按钮,创建Button函数,添加以下代码:
GetDlgItemText(IDC_EDIT1, m_sno);
GetDlgItemText(IDC_EDIT2, m_pw);
CString sql;
sql.Format(L"exec Login '%s','%s'", m_sno, m_pw)