怎样在VC中用代码操作SQL(1)?---注册帐号,修改密码,登录3个功能
2012-06-05 21:55
676 查看
怎样在VC中用代码操作SQL(1)?---注册帐号,修改密码,登录3个功能
2010年08月19日 星期四 上午 10:12
类别:sql百科知识|
|添加到搜藏 |分享到i贴吧|浏览(1008)|评论 (0)
上一篇:error C1189:#error:This file r... 下一篇:VC调用SQL详解
2010年08月19日 星期四 上午 10:12
效果图说明:图中包括3个模块(1.注册帐号 2.修改密码 3.登录),注意用户资料是保存SQL数据库中,而不是VC中 ------------------本文分2部分 第1部分:讲解 第2部分:源代码------------------------- ---------------第1部分:讲解----------------- 第1步:SQL准备--->建立好数据库(新建数据库--->新建数据表(帐号与密码)) //代码详见源代码区备注1(后面简写成备注*) 第2步:VC准备---->建立好VC模型--->建立MFC对话框程序(是多字节字符集) //注:此处为介绍主题,所以账号与密码框都在同一对话框上 步骤1:建立好界面 --->菜单栏上格式|Tab Order,专门设置键盘上的Tab键 --->Default Button,给登录添加上 --->注意帐号是组合框,而密码是编辑框(注:密码通常是带***号,在VC属性里直接改就可以了,本例为突出主题,没改) 步骤2:建立好响应区,但不添加任何响应事件 第3步:VC连接SQL数据库准备 //详见备注2 第4步:给框架添加"灵魂",代码已准备好,直接添加 //详见备注3 注意点1:在SQL中测试时,数字可以不用'单引号,但是字符串必须要,否则报错! 所以在获取到对话框的信息,用上单引号,其实就是在原有""下,多加''即可---------->出现错误,如图所示 CString str_user="'"+m_suser+"'"; //第1个正确 CString str_user="'"+"'"+m_suser+"'"; //第2个错误,error C2110: “+”: 不能添加两个指针 解决办法1:CString str_user=CString("'")+"'"+m_suser+"'"; 解决办法2:CString str="'"+m_suser+"'";CString str_user="'"+str;//如果1次只能加1个指针,那分2次加 注意点2:为保证代码安全,所以用try,catch语句来帮忙<<=====******=====注意:一定要重视try,catch语句=====*******====>> 注意点3:容易出错:使用完后记的关闭对象,或者关闭对象后,不允许操作,当然这些提示try,catch会给出提示,一般情况下如果不用try,catch找错误,VC是找不到的,几乎无论什么错误都报R6010,而这错误代码是在MSDN(MSDN目前有R6009,R6016,但是R6010到R6015这几个没有)找不到,在网上也搜索不到.必须要用try,catch才能找到,而且非常详细----->说了很多边try,catch了,是为了说明它的重要性! ------------------------------------------第2部分:源代码---------------------------------------------------- 备注1:SQL准备(注:此语句必须经过SQL数据库检测合格,才能给VC用!) --------创建表---------- use KOUSER go CREATE TABLE kolist ( suser char(10) NOT NULL /*帐号字段,注意不是int,因为QQ除了数字附录还允许邮箱登录*/ CONSTRAINT PK_sno PRIMARY KEY CLUSTERED, /*主键约束*/ spassword char(16) NOT NULL, /*密码字段*/ ) --------注册用户---------- use KOUSER go INSERT INTO kolist VALUES ('123456789','123abc') --注:帐号必须为数字,所以在输入的时候限制为int,然后将其转换为CString类型保存在数据库 --------修改密码---------- use KOUSER go update kolist set spassword='555xyz' where suser='123456789'; --------登录---------- use KOUSER go select count(*) as name from kolist where suser='123456789' and spassword='555xyz'; //name是别名,即字段名.在VC中提取SQL数据库,就要这个字段名 图中当判断帐号与密码同时正确时(注:记的用单引号包括起来,否则出错),count会计算为1,然后将值传给别名name -------SQL语句准备完毕! 备注2: -----------头文件中stdafx.h---------------- #import "C:\Program Files\Common Files\System\ado\msado15.dll" rename_namespace ("ADODB")rename ("EOF","ADOEOF") using namespace ADODB ; -----------头文件中***dlg.h----------------//注:在添加时,VC编译器可能不认,需要生成一次(把头文件中信息写进去) public: _ConnectionPtr m_pMyConection; _RecordsetPtr m_pMyRecord; -----------源文件中***dlg.cpp---------------- void CVC用代码操作SQLDlg::OnBnClickedButton1() { AfxOleInit();//初始化COM库 m_pMyConection.CreateInstance(__uuidof(Connection));//使用_ConnectionPtr接口 m_pMyRecord.CreateInstance(__uuidof(Recordset));//使用_RecordsetPtr接口 m_pMyConection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KOUSER;","","",-1); //打开数据库--->前3个是教材书上的,第4个是要连接的数据库,详见最后备注1 m_pMyConection->Close();//关闭_ConnectionPtr接口 } 备注3: --------注册用户---------- 注意点1:注册用户时,由于给用户名设置了主键,所以防止了重复,详见如图提示(注:这个是用try,catch语句捕获的提示) --------修改密码---------- --------登录---------- void CVC怎样用代码操作SQLDlg::OnBnClickedButtonNewUser() { UpdateData(TRUE); try { CString str_user="'"+m_suser+"'";//加单引号,因为SQL中字符需要用'包括起来 CString str_password="'"+m_spassword+"'"; m_pMyConection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KOUSER;","","",-1); _bstr_t MySQL=("INSERT INTO kolist VALUES ("+str_user+","+str_password+")"); this->m_pMyConection->Execute((_bstr_t)MySQL,NULL,adCmdText); m_pMyConection->Close();//关闭_ConnectionPtr接口 } catch(_com_error e) { AfxMessageBox(e.Description());//注:可以添加return;返回值,不添加表示退出 } } void CVC怎样用代码操作SQLDlg::OnBnClickedButtonUpdatePassword() { UpdateData(TRUE); try { CString str_user="'"+m_suser+"'";//加单引号,因为SQL中字符需要用'包括起来 CString str_password="'"+m_spassword+"'"; m_pMyConection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KOUSER;","","",-1); CString MySQL=(_bstr_t)("update kolist set spassword="+str_password+" where suser="+str_user); this->m_pMyConection->Execute((_bstr_t)MySQL,NULL,adCmdText); m_pMyConection->Close();//关闭_ConnectionPtr接口 } catch(_com_error e) { AfxMessageBox(e.Description()); } } void CVC怎样用代码操作SQLDlg::OnBnClickedButtonEnter() { UpdateData(TRUE); if(m_suser==""||m_spassword=="") { AfxMessageBox(_T("帐号或密码不能为空")); } else { try { CString str_user="'"+m_suser+"'";//加单引号,因为SQL中字符需要用'包括起来 CString str_password="'"+m_spassword+"'"; m_pMyConection->Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=KOUSER;","","",-1); _bstr_t MySQL("select count(*) as name from kolist where suser="+str_user+" and spassword="+str_password); this->m_pMyRecord=this->m_pMyConection->Execute((_bstr_t)MySQL,NULL,adCmdText); CString MyValue; MyValue=(TCHAR*)(_bstr_t)m_pMyRecord->GetFields()->GetItem(L"name")->Value; int n=atoi(MyValue); if(n==0) { AfxMessageBox("帐号或密码错误,请重输"); } if(n==1) { AfxMessageBox("登录成功!"); } AfxMessageBox(MyValue); m_pMyRecord->Close();//关闭_RecordsetPtr接口 m_pMyConection->Close();//关闭_ConnectionPtr接口 } catch(_com_error e) { AfxMessageBox(e.Description()); } } } 备注1: "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=;PassWord=;Initial Catalog=;Data Source=" 这句话每个关键题的含义, Provider=SQLOLEDB.1 ------打开数据库用oledb的方式连接 Persist Security Info ----是否保存安全信息 User ID-------------------用户名 PassWord------------------密码 Initial Catalog-----------数据库的名称或者数据库ip或者目录 Data Source---------------数据源 若想获得更多信息,可以输入里面的关键字在网上搜索,例如Initial Catalog ------------------------------------- 附注1:源代码已上传至邮箱,即取即用,另外附加了ado.txt(百度文库下的讲解资料)与ado封装好的接口(据说是别人认为比较好的ADO,但是不是SQL,所以先保存着) 附注2:基本上完成了这3个模块.不过这仅是一点皮毛,后面调用的比这难上N倍,上次的IO端口,估计是每秒钟同时处理上万条信息,比如QQ用户上亿人在线,估计有1万人同时在改个人资料,以后继续更新了,本博客<<VC调用SQL详解 >>也准备好了,随时调用资料 附注3:新增新的功能.详见<<怎样在VC中用代码操作SQL(2)?---获取用户列表>>,以后新增的就不说明了.直接在第16轮SQL百科知识里找等. 附注4:解决了在拷贝代码在win32控制台应用程序时的BUG,原因:初始化COM出了错. //初始化COM库 //AfxOleInit();//经测试,也与别的程序员讨论,这个Afx开头的只能在MFC对话框程序上运行,不能用在WIN32 控制台应用程序上 ::CoInitialize(NULL);//经测试,可以运用在win32控制台应用程序上,当然也可以应用在MFC对话框程序上 |
|添加到搜藏 |分享到i贴吧|浏览(1008)|评论 (0)
上一篇:error C1189:#error:This file r... 下一篇:VC调用SQL详解
相关文章推荐
- PHP实现的登录,注册及密码修改功能分析
- android注册 登录 修改帐号密码 添加资料 给新注册用户充值DEMO
- Django1.6 用Form实现注册登录注销修改密码(含代码!)
- 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
- 安装好MySQL后,用SQL去修改root帐号的密码,结果不能登录了!
- PHP实现的登录,注册及密码修改功能分析
- 网站用户登录、注册和修改密码常用代码,采用三层架构
- android注册 登录+修改帐号密码+添加资料+给指定帐号充值
- 安装好MySQL后,用SQL去修改root帐号的密码,结果不能登录了!
- Django1.6 用Form实现注册登录注销修改密码(含代码!)
- vue.js实现用户评论、登录、注册、及修改用户部分信息功能代码。
- 简单的流操作实现账户的注册、登录、修改密码
- 安装好MySQL后,用SQL去修改root帐号的密码,结果不能登录了!
- VC SQL 登录对话框数据库对用户名和密码进行验证代码!
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
- 简单的JSP-Servlet登录,注册,修改密码操作
- 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作
- [Android实例] android注册 登录+修改帐号密码+添加资料+给指定帐号充值 .....
- 安装好MySQL后,用SQL去修改root帐号的密码,结果不能登录了!
- 如何实现共享软件网络授权认证,包括注册新用户、登录、修改密码等操作