1 / 19

VC 使用 ADO 编写登录组件

VC 使用 ADO 编写登录组件. 1. 使用 ATL COM AppWizard ,创建 ATL 工程,服务器类型为 DLL ,工程名为 Login 2. 创建一个 ATL 对象,名为 UserI ,并为此对象添加一个方法,名为 Check ,函数名称和参数如下: CUserI::Check(BSTR *User, BSTR *Password, BSTR *pbstrRe) 3. 在 stdafx.h 头文件中添加引入 ADO 库文件的代码:

declan
Download Presentation

VC 使用 ADO 编写登录组件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VC使用ADO编写登录组件 • 1.使用ATL COM AppWizard,创建ATL工程,服务器类型为DLL,工程名为Login • 2. 创建一个ATL对象,名为UserI,并为此对象添加一个方法,名为Check,函数名称和参数如下: CUserI::Check(BSTR *User, BSTR *Password, BSTR *pbstrRe) • 3. 在stdafx.h头文件中添加引入ADO库文件的代码: #import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","EndofFile")

  2. 4.在Login.cpp的DLLMAIN函数的开始处添加 HRESULT hRes=CoInitialize(NULL); _ASSERTE(SUCCEEDED(hRes)); • 5.在Login.cpp的DLLMAIN函数的结束处添加 CoUninitialize(); • 6.编写Check函数代码: 调用SQL Server数据库 HRESULT hr=S_OK; _RecordsetPtr pRs; _ConnectionPtr pConn; FieldsPtr pFields; FieldPtr pField; *pbstrRe=NULL;

  3. try { //建立与数据源uuidof_info的连接,如果出错,引发异常处理 pConn.CreateInstance(_uuidof(Connection)); //连接数据库 pConn->Open("DSN=Sqldata","","",NULL); TCHAR szBuffer[512]; _variant_t vRecCount; char * name = _com_util::ConvertBSTRToString(*User); SysFreeString(*User); char * password = _com_util::ConvertBSTRToString(*Password); SysFreeString(*Password); wsprintf(szBuffer,_T("select * from name where name='%s' and password='%s'"),name,password);

  4. _bstr_t bstrSQL=szBuffer; pRs=pConn->Execute(bstrSQL,&vRecCount,-1); //如果没有记录,说明此帐号不存在 if(vRecCount.lVal==0) { CComBSTR bstr("Failed"); *pbstrRe=bstr.Detach(); delete(name); delete(password); } //输出验证信息

  5. else { CComBSTR bstr("Succeed"); *pbstrRe=bstr.Detach(); delete(name); delete(password); } } catch(_com_error *e) { const TCHAR * Error=e->ErrorMessage(); } pRs=NULL; pConn=NULL; return S_OK;

  6. 调用Access数据库 HRESULT hr=S_OK; _RecordsetPtr pRs; _ConnectionPtr pConn; FieldsPtr pFields; FieldPtr pField; *pbstrRe=NULL; try { //建立与数据源uuidof_info的连接,如果出错,引发异常处理 pConn.CreateInstance(_uuidof(Connection)); pRs.CreateInstance(_uuidof(Recordset)); //连接数据库 pConn->ConnectionString="DSN=logindata"; pConn->Open("","","",0);

  7. TCHAR szBuffer[512]; _variant_t vRecCount; char * name = _com_util::ConvertBSTRToString(*User); SysFreeString(*User); char * password = _com_util::ConvertBSTRToString(*Password); SysFreeString(*Password); wsprintf(szBuffer,_T("select * from login where name='%s' and password='%s'"),name,password); _bstr_t bstrSQL=szBuffer; pRs->Open(bstrSQL,(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);

  8. //如果没有记录,说明此帐号不存在 if(pRs->EndofFile) { CComBSTR bstr("Failed"); *pbstrRe=bstr.Detach(); delete(name); delete(password); } //输出验证信息 else { CComBSTR bstr("Succeed"); *pbstrRe=bstr.Detach(); delete(name); delete(password); } }

  9. catch(_com_error *e) { const TCHAR * Error=e->ErrorMessage(); } pRs=NULL; pConn=NULL; return S_OK;

  10. 服务器组件 • 服务器组件编写成功,编译服务器,生成login.dll组件

  11. 数据库连接 • 以上和数据库连接的程序都使用的是ODBC,要先在ODBC中建立系统DNS才可以运行 • 也可以使用ADO字符串,使用ADO字符串的方法如下页:

  12. 数据库连接 • 数据库连接有两种方法:1、使用ODBC。2、使用ADO字符串 • 1、使用ODBC连接SQL Server如下: pConn.CreateInstance(_uuidof(Connection)); pConn->Open("DSN=Sqldata","","",NULL); 使用ADO字符串连接SQL Server如下: pConn->Open("Provider=SQLOLEDB.1;Password=0224;Persist Security Info=True;User ID=sa;Initial Catalog=mis;Data Source=LZW","","",adModeUnknown); 或者pConn->Open("Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog=mis;Data Source=LZW","sa","0224",adModeUnknown);

  13. 数据库连接 • 2、使用ODBC连接Access如下: pConn->ConnectionString="DSN=logindata"; pConn->Open("","","",0); 使用ADO字符串连接Access如下: pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=f:/vccom/db2.mdb;Persist Security Info=False","","",adModeUnknown); 其中f:/vccom/db2.mdb是此数据库的路径

  14. 客户端实现(ADO组件调用) • 此客户端实现同没有使用数据库时,创建的Hello World程序步骤相同,只是调用函数的实现不一样,调用函数的程序如下:

  15. UpdateData(TRUE); try { IUserIPtr pGreet("Login.UserI.1"); BSTR User; BSTR Password; if((m_user=="")||(m_password=="")) { MessageBox("用户名或者密码错误",NULL,MB_OK); } else { User=_com_util::ConvertStringToBSTR(CTestadoDlg::m_user);

  16. Password=_com_util::ConvertStringToBSTR(m_password); BSTR Valided; Valided=pGreet->Check(&User,&Password); _bstr_t valid(Valided); if(valid.length()==7) { MessageBox("用户登录成功",NULL,MB_OK); } else { MessageBox("用户名或者密码错误",NULL,MB_OK); } } }

  17. catch(_com_error&ex) { MessageBox(ex.ErrorMessage()); } UpdateData(FALSE);

  18. m_user和m_password变量 • 在对话框中先添加两个Edit,然后在Edit1上单击鼠标右键,选择“建立类向导”,再选择“Member Variables”页,为这两个Edit添加变量,变量添加如下: • IDC_EDIT1 CString m_user • IDC_EDIT2 CString m_password • 此后就可以通过这两个变量来控制EDIT的显示和取值

More Related