您的位置:首页 > 数据库

怎样在VC中用代码操作SQL(1)?---注册帐号,修改密码,登录3个功能

2012-06-05 21:55 676 查看
怎样在VC中用代码操作SQL(1)?---注册帐号,修改密码,登录3个功能

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对话框程序上


类别:sql百科知识|

|添加到搜藏 |分享到i贴吧|浏览(1008)|评论 (0)



上一篇:error C1189:#error:This file r... 下一篇:VC调用SQL详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐