MFC中SQLSever数据库的增删查改

更新时间:2023-06-02 20:55:35 阅读: 评论:0

MFC中SQLSever数据库的增删查改
1.⾸先得要ADO中connection对象链接数据库
2.然后介绍记录集对象:_RecordtPt 类型  :这相当于数据库中的⼀个表的对象
3.奉出我当时具体的代码,这是添加在按钮事件通知函数中,详细解释在代码的后边
增加:
//创建记录集
_RecordtPtr m_pRecordt;
m_pRecordt.CreateInstance(__uuidof(Recordt));
//得到⽤户从编辑框、下拉框输⼊的值
CString strsql, stu_Id, stu_Name, stu_Sex, stu_Institute, stu_Class, stu_Home, stu_Phone, stu_Birthday, stu_Major;
int i = Sex.GetCurSel();
Sex.GetLBText(i,stu_Sex);
int j = Institute.GetCurSel();
Institute.GetLBText(i,stu_Institute);
Id.GetWindowTextW(stu_Id);
风格服饰
Name.GetWindowTextW(stu_Name);
Class.GetWindowTextW(stu_Class);
Home.GetWindowTextW(stu_Home);
Phone.GetWindowTextW(stu_Phone);
Major.GetWindowTextW(stu_Major);
Birthday.GetWindowTextW(stu_Birthday);
//添加数据库语⾔,括号中的字符串就是操作数据库进⾏添加操作的语⾔,其中
/
/StuInfo是我数据库中的⼀个学⽣信息的表
strsql.Format(TEXT("inrt into StuInfo( Id, Name, Sex, Institue, Major, Class, Birthday, Home, Phone) values( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"),  stu_Id, stu_Name, stu_Sex, stu_Institute, stu_Major, stu_Class, stu_Birthday, stu_Home, stu_Phone);
//连接到数据库并进⾏添加操作,将strsql添加在第⼀个参数,m_pConnection就是当所连接的数据库的connectoin对象
try
{
m_pRecordt->Open((_variant_t)strsql, m_pConnection.GetInterfacePtr(), adOpenKeyt, adLockOptimistic, adCmdText);
AfxMessageBox(TEXT("添加成功"));
}
catch (...)
{
AfxMessageBox(_T("添加失败"));
}
m_pRecordt->Clo();//如果有中断报错,删掉clo函数
m_pRecordt = NULL;
删除:
//保存编辑框中数据
CString strsql, stu_Id;
Search_Id.GetWindowTextW(stu_Id);
//数据库语⾔,选择
strsql = TEXT("lect * from StuInfo");
/
/将查询数据导⼊m_pRecordt数据容器
m_pRecordt = m_pConnection->Execute(_bstr_t(strsql), NULL, adCmdText);
producesint Num = 0;
//将记录集获取的数据⼀⼀与输⼊的数据进⾏⽐较
while (!m_pRecordt->adoEOF)//EOF判断是否到末尾
{
CString Info_Id = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Id")->Value;
//如果相等即查找到
if (stu_Id.Compare(Info_Id) == 0)
{
Num++;
/
/以下是获取数据库中每⼀⾏的内容
CString Info_Name = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Name")->Value;
CString Info_Sex = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Sex")->Value;
CString Info_Institue = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Institue")->Value;  CString Info_Major = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Major")->Value;
CString Info_Class = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Class")->Value;
CString Info_Birthday = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Birthday")->Value;  CString Info_Home = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Home")->Value;
CString Info_Phone = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("Phone")->Value;
break;
}
/
/记录下移
m_pRecordt->MoveNext();
}
if (!Num)
{
AfxMessageBox(_T("⽆此学⽣的任何记录!"));
}
m_pRecordt->Clo();//如果有中断报错,删掉clo函数
m_pRecordt = NULL;
修改:
//获得⽤户输⼊值
CString strsql, stu_Id, stu_Name,Content;
Modify_Sex.GetWindowTextW(stu_Name);
Modify_Name.GetWindowTextW(stu_Id);
int Select = InfoCategory.GetCurSel();
Modify_Contents.GetWindowTextW(Content);
//数据库的执⾏语⾔
//update指更新  t Id:是指修改Id后的新值,  where Id and Name:是指想要修改学⽣的Id和姓名,也可以只写Id前提是Id必须唯⼀ strsql.Format(_T("update StuInfo t Id='%s' where Id = '%s' and Name = '%s'"), Content,stu_Id,stu_Name );
//删除
try
{
m_pConnection->Execute(_bstr_t(strsql), 0, adCmdText);
AfxMessageBox(TEXT("修改成功"));rockband
}
catch (_com_error e)
{
torrey devitto
MessageBox(e.Description());
return;
}
m_pRecordt = NULL;
删除:jocelin
删除有两种⽅法:
(1):使⽤connection对象
//获取⽤户值
CString strSql,stu_Id,stu_Name;
Delete_Id.GetWindowTextW(stu_Id);
Delete_Name.GetWindowTextW(stu_Name);
//添加数据库的语⾔
strSql.Format(TEXT("delete from StuInfo where Id = %s "),stu_Id );
//执⾏删除
try
{
m_pConnection->Execute(_bstr_t(strSql), 0, adCmdText);
MessageBox(TEXT("删除成功!"));
}
//捕捉错误原因
catch (_com_error e)juan怎么拼读
{
MessageBox(e.Description());
return ;
}
(2):使⽤记录集对象
CString ur_Name;
Revi.GetWindowTextW(ur_Name);
/
/定义⼀个记录集对象,负责查找想要删除的学⽣信息所在当前表中的⾏号
_RecordtPtr m_pRecordt;
m_pRecordt.CreateInstance(__uuidof(Recordt));
//利⽤Execute函数将查询数据导⼊m_pRecordt数据容器
m_pRecordt = Land_m_pConnection->Execute(_bstr_t(TEXT("lect * from UrPassWord")), NULL, adCmdText);//
//定位输⼊⽤户的名称在哪⼀⾏
2013北京中考分数线
分词作定语int Num = 0;
//将记录集获取的数据⼀⼀与输⼊的数据进⾏⽐较
while (!m_pRecordt->adoEOF)//EOF判断是否到末尾
{
CString Info_Name = (TCHAR *)(_bstr_t)m_pRecordt->GetFields()->GetItem("UrName")->Value;
if (ur_Name.Compare(Info_Name) == 0)
{
break;
}
m_pRecordt->MoveNext();
Num++;
}
//重新定义⼀个记录集,利⽤Open打开
主题风格
_RecordtPtr new_m_pRecordt;
new_m_pRecordt.CreateInstance(__uuidof(Recordt));
new_m_pRecordt->Open(TEXT("lect * from UrPassWord"),_variant_t((IDispatch*)Land_m_pConnection, true),
adOpenStatic,
adLockOptimistic,
adCmdText);
//执⾏删除
try
{
new_m_pRecordt->MoveFirst();
new_m_pRecordt->Move(Num);                //移动到Num个记录
new_m_pRecordt->Delete(adAffectCurrent);  //删除当前记录
MessageBox(TEXT("已经成功删除该⽤户!"));
new_m_pRecordt->Update();                  //对数据库进⾏更新
}
catch (_com_error e)
{
MessageBox(e.Description());
}
to do
我当时在写代码的时候,第⼀次写connection对象是正常的,没有异常,但后来⼀直在执⾏时候有中断的异常,错误没找来,想不通啊,只是通过使⽤了第⼆种⽅法才解决,后来我想,可能是当时第⼀次使⽤connection对象删除或者在初始化连接的时候没有调⽤clo进⾏关闭连接造成的。可是程序的其他的cpp功能还需要连接数据库,为了避免不停的打开关闭,就直接使⽤记录集对象了。

本文发布于:2023-06-02 20:55:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/131793.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据库   记录集   对象
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图