1、VC连接数据库VC连接SQL2000数据库 对于初学VC的朋友来说,连接数据库其实是一件不容易的事情。记得我当时为了与数据库连接上,找了好多资料,上网看了好多文章,都没有解决这个问题。后来,有个网友帮我解决了,我再次表示感谢。为了后来VC初学的朋友的方便,我现在将VC连接SQL2000数据库的方法写下来,就算你是初学,即使刚入门,也可以成功连接数据库的。 (注意:由于文章过长,本文章未写完,如果想要整个的代码,可以留个邮箱,或发邮件到yinfulin888888索要) 先做点准备工作吧。1学VC连接数据库,要安装两个软件,Visual C+6.0和SQL2000。怎么安装,我不说了。2要连接数
2、据库先要启动SQL2000的服务器,看下图吧 单击开始,就可以启动了。3然后,还是上面,打开“企业管理器”,要建立数据库和表了。打开根目录后,有个(local)(WindowsNT)的,在上面单击右键,选择属性,再选择安全性,身份验证选择上面那个SQL Server和Windows,再确定,是。等一下就好了。4建立数据库,在“数据库”根目录上,单击右键,选择“新建数据库”,输入数据库名字db_client(也可以用其他的名字,但是下面有些地方会用到),展开db_client,在“表”上右键单击,选择“新建表”,建立如下表:完成之后,直接关闭,提示保存,选择“是”,然后填入表名字,tb_user
3、,即可。然后在表中填入数据。右键单击刚建立的表tb_user,选择“打开表”,“返回所以行”,填入数据,(为了方便登录,第一行都输入1吧)。这样表就建立好了。5现在要开始正式编程了。打开VC6.0.选择“文件”,“新建”,“工程”,MFC AppWizard(exe),工程名字为:Client,路径自己选择一下吧。第一步,选择“对话框应用程序”,直接“完成”。6现在要开始写程序了,先新建一个类吧,“Insert”,“New class”,classicType 选择:Generic Classic,Name为:CADO,OK即可。ADO.h文件的代码如下:#if !defined(AFX_AD
4、O_H_9B5E5042_244A_4558_A0EA_DECC024DB191_INCLUDED_)#define AFX_ADO_H_9B5E5042_244A_4558_A0EA_DECC024DB191_INCLUDED_ #include stdafx.h #if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000 class ADO public: _RecordsetPtr m_pRecordset;/定义记录集指针 _ConnectionPtr m_pConnection;/定义连接指针 public: void GetData(CS
5、tring strSQL,CString UserID); CString m_UserID;/用户ID CString m_UserPwd;/用户密码 CString m_UserType;/用户类型/ bool Test(CString SQL); void rstOpen(CString TSQL);/打开记录集 void ExecuteSQL(CString SQL);/执行SQL语句 bool Move(int nRecordNum);/移动记录集 CString GetFieldValue(CString Field);/获得字段值 void GetErrors(_com_erro
6、r eErrors);/获得错误信息 bool Open(CString srecordset,UINT adCmd);/打开记录集 int GetRecordCount();/获得记录个数 bool MoveFirst();/最开始一条 bool MoveNext();/下一条 bool MoveLast();/最后一条 bool MovePrevious();/前一条 void close();/关闭连接和记录集 ADO(); virtual ADO(); ; #endif / !defined(AFX_ADO_H_9B5E5042_244A_4558_A0EA_DECC024DB191_
7、INCLUDED_) ADO.cpp文件代码为: #include stdafx.h#include Client.h#include ADO.h #ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endif/ Construction/Destruction/ ADO:ADO() /构造ADO对象时候自动调用打开连接 :CoInitialize(NULL);/初始化 try m_pConnection.CreateInstance(_uuidof(Connection);/建立ADO
8、连接的句柄 _bstr_t strConnect=Provider=SQLOLEDB;data source=127.0.0.1;Database=db_client;uid=sa;pwd=sa;/注意:如果你建立数据库时候没有用户名和密码,上面一句该为下面的:strConnect=Provider=SQLOLEDB;data source=127.0.0.1;Database=db_client;uid=;pwd=; m_pConnection-Open(strConnect,0);/打开连接 catch(_com_error e) AfxMessageBox(e.Description()
9、; ADO:ADO() void ADO:close() /关闭记录集和连接 m_pRecordset-Close(); m_pConnection-Close(); m_pRecordset=NULL; m_pConnection=NULL; :CoUninitialize(); bool ADO:MovePrevious() /记录集前一条 try m_pRecordset-MovePrevious(); catch(_com_error e) AfxMessageBox(e.Description(); return false; return TRUE; bool ADO:MoveLa
10、st() /记录集最后一条 try m_pRecordset-MoveLast(); catch(_com_error e) AfxMessageBox(e.Description(); return false; return TRUE; bool ADO:MoveNext()/记录集下一条 try m_pRecordset-MoveNext(); catch(_com_error e) AfxMessageBox(e.Description(); return false; return TRUE; bool ADO:MoveFirst() /记录集开始一条 try m_pRecordse
11、t-MoveFirst(); catch(_com_error e) AfxMessageBox(e.Description(); return false; return TRUE; int ADO:GetRecordCount() /获得记录数目 int nCount; try m_pRecordset-MoveFirst(); catch(_com_error e) return 0; if(m_pRecordset-adoEOF) return 0; while(!m_pRecordset-adoEOF) m_pRecordset-MoveNext(); nCount+; m_pRec
12、ordset-MoveFirst(); return nCount; bool ADO:Open(CString srecordset, UINT adCmd) /打开记录集 try /用连接指针打开记录集,可以打开空记录集 m_pRecordset=m_pConnection-Execute(_bstr_t)srecordset,NULL,adCmd); catch(_com_error &e) this-GetErrors(e); return false; return true; void ADO:GetErrors(_com_error eErrors) /获得错误信息 Errors
13、Ptr pErrors=m_pConnection-GetErrors(); if(pErrors-GetCount()=0) MessageBox(NULL,eErrors.ErrorMessage(),错误,MB_OK|MB_ICONEXCLAMATION); else for(int i=0;iGetCount();i+)/多个错误 /获得ADO执行时出错的语言描述,并输出 _bstr_t desc=pErrors-GetItem(long)i)-GetDescription(); MessageBox(NULL,desc,错误,MB_OK|MB_ICONEXCLAMATION); CS
14、tring ADO:GetFieldValue(CString Field) /获得字段值 _variant_t Thevalue; CString temp; Thevalue=m_pRecordset-GetCollect(_bstr_t)Field); if(Thevalue.vt=VT_EMPTY | Thevalue.vt=VT_NULL) temp=; else temp=(char*)(_bstr_t)Thevalue; temp.TrimLeft(); temp.TrimRight(); return temp; bool ADO:Move(int nRecordNum) /移
15、动记录集指针到指定位置 try if(!m_pRecordset-adoBOF) m_pRecordset-MoveFirst(); m_pRecordset-Move(nRecordNum); catch(_com_error e) AfxMessageBox(e.Description(); return false; return TRUE; void ADO:ExecuteSQL(CString SQL) /执行 try m_pConnection-Execute(_bstr_t)SQL,NULL,adCmdText);/用指向连接的指针指向SQL语句 catch(_com_error
16、 e) AfxMessageBox(e.Description(); void ADO:rstOpen(CString TSQL) /打开记录集 try /用记录指针打开记录集 _bstr_t strSQL=TSQL.AllocSysString(); m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset-Open(strSQL,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText); catch(_com_error e) m_pRecordse
17、t=m_pConnection-Execute(_bstr_t(TSQL),NULL,adCmdText); void ADO:GetData(CString strSQL,CString UserID) m_pRecordset.CreateInstance(_uuidof(Recordset);/创建记录集对象 m_pRecordset-Open(LPTSTR)strSQL.GetBuffer(130),m_pConnection.GetInterfacePtr() ,adOpenDynamic, adLockOptimistic,adCmdText);/取得表中的记录 /返回各列值 if
18、(m_pRecordset-adoEOF) return ; else m_UserID=UserID; m_UserPwd=(LPCTSTR)(_bstr_t)m_pRecordset-GetCollect(user_mm); m_UserType=(LPCTSTR)(_bstr_t)m_pRecordset-GetCollect(user_type); 在StdAfx.h里面加入下面的代码:#import c:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,adoEOF) rename(BOF,ad
19、oBOF) 7下面新建一个对话框,该ID为:IDD_MAINDLG为该对话框新建一个类,直接在对话框上双击,在弹出的对话框单击OK 输入Name为:CMainDlg8把第一个对话框ID为: IDD_DIALOG1该为:ID D_LOGINDLG并设计该对话框为下图:编辑框控件ID为:IDC_USERID,IDC_USERPWD按钮控件ID为:IDC_OK,IDC_EXIT 9现在为按钮控件添加消息响应:菜单,“View”,“ClassWiarzd”,“MessageMap ”,“Client”,“CClientDlg”,IDC_OK,BN_CLICED,Add Function ,OK,OK,
20、用同样的方法添加IDC_EXIT消息处理。在CClientDlg的头文件中的某个Public下添加:int m_count; ADO adoConn;在OnExit()的代码如下:void CClientDlg:OnExit() / TODO: Add your control notification handler code here int result; if(m_count3) CDialog:OnCancel(); else result=MessageBox(是否真的要退出,提示,MB_YESNO); if(IDYES=result) /exit CDialog:OnCancel(); else if(IDNO=result) /no m_UserID=; m_UserPwd=; UpdateData(FALSE); GetDlgItem(IDC_USERID)-SetFocus();
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2