如何将listcontrol控件中的数据读取到SQL数据库中?

易芒客 2017-11-24 09:52:37
目前我在数据库操作的时候遇到一个问题,我在Listcontrol中打开来自Excel的数据源,但是现在想把listcontrol控件中的数据读取到SQL数据库中(采用ODBC)。一直么没有实现,求大神能够给予指点,谢谢。下面我贴上导入的代码,如何在已完成代码的基础上添加listcontrol控件中的数据读取到SQL数据库部分。(我的数据库:score)
void CMy4Dlg::OnImportexcel()
{
// TODO: Add your control notification handler code here
if(MessageBox("请确保已经将要导入的excel的工作表命名为: 信息统计\n否则,无法导入数据","帮助",MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL)return;

_TCHAR strFileFilter[] = "Microsoft Excel 97-2003 工作表(*.xls)|*.xls|"
"Microsoft Excel 2007 工作表(*.xlsx)|*.xlsx|";
//"所有文件(*.*)|*.*||";
CFileDialog Dlg(TRUE,NULL ,NULL, OFN_HIDEREADONLY,strFileFilter);
if(Dlg.DoModal()==IDOK)
{
CString strFileName = Dlg.GetFileName(); //获取文件名
CString strFilePath = Dlg.GetPathName(); //获取文件路径
GetDlgItem(IDC_FILEPATH)->SetWindowText(strFilePath); //显示文件路径
// GetDlgItem(IDC_FILENAME)->SetWindowText(strFileName); //显示文件名

//////////////////////////////////////////////////////////////////////////////////
CDatabase database;
CString sSql;
CString sItem1[10000], sItem2[10000],sItem3[10000],sItem4[10000];
CString sDriver;
CString sDsn;

// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"
sDriver = GetExcelDriver();
if (sDriver.IsEmpty())
{
// 没有发现Excel驱动
AfxMessageBox("没有安装Excel驱动!");
return;
}

// 创建进行存取的字符串
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", sDriver, strFilePath);

int count1=0; //计数,以显示增加成功的记录数目
int count2=0; //计数,以显示增加失败的记录数目

TRY
{
// 打开数据库(既Excel文件)
database.Open(NULL, false, false, sDsn);
CRecordset recset(&database);
// 设置读取的查询语句.

sSql = "SELECT * " //sSql = "SELECT [姓名], [年龄], [大学], [工资] "
"FROM [信息统计$] " ; //此处是关键之处,需要加[$],否则,提示找不到数据引擎
// "ORDER BY [姓名] ";

// 执行查询语句
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);

m_list.DeleteAllItems(); //此句用于清除表格的全部记录

int i=0;
// 获取查询结果
while (!recset.IsEOF())
{
//读取Excel内部数值
recset.GetFieldValue("姓名", sItem1[i]);
recset.GetFieldValue("年龄", sItem2[i]);
recset.GetFieldValue("大学", sItem3[i]);
recset.GetFieldValue("工资", sItem4[i]);
//显示记取的内容
m_list.InsertItem(0, " "); //**************加入此语才能显示************************
m_list.SetItemText(0,0, sItem1[i]);
m_list.SetItemText(0,1, sItem2[i]);
m_list.SetItemText(0,2, sItem3[i]);
m_list.SetItemText(0,3, sItem4[i]);
count1=count1+1; //记录数+1
// 移到excel的下一行
recset.MoveNext();
i=i+1;
}
// 关闭数据库
database.Close();
}
CATCH(CDBException, e)
{
// 数据库操作产生异常时...
AfxMessageBox("数据库错误: " + e->m_strError);
}
END_CATCH;
//////////////////////////////////////////////////////////////////////////////////
CString string1;
string1.Format("%d",count1); //将变量组装到字符串中
CString string2;
string2.Format("%d",count2); //将变量组装到字符串中
if(count1!=0&&count2!=0)
MessageBox("共增加记录成功"+string1+"条!!!\n共增加记录失败"+string2+"条!!!","提示",MB_ICONASTERISK);
if(count1==0&&count2!=0)
MessageBox("增加记录失败,记录已经存在或者数据文件格式不对!!!","提示",16);
if(count1!=0&&count2==0)
MessageBox("共增加记录成功"+string1+"条!!!","提示",MB_ICONASTERISK);
}

//以下代码是将listcontrol中的信息写入到数据库中
。。。。。。。。。?????????



}

...全文
331 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiht594 2017-11-30
  • 打赏
  • 举报
回复
引用 8 楼 zhao1209 的回复:
@ jiht594,老师您好,你能不能看看如何在源代码基础上加上执行语句,谢谢您了

应该解决了吧、
没有的话、搜以下 “C++ ODBC 数据库名”, 找个简单的例子。调好了再合到你上面的代码里。
易芒客 2017-11-25
  • 打赏
  • 举报
回复
@ jiht594,老师您好,你能不能看看如何在源代码基础上加上执行语句,谢谢您了
paschen 2017-11-24
  • 打赏
  • 举报
回复
你要解决的重点不在于listctrl,而是数据库操作,这个根据不同数据库,网上大把讲解,楼主可以搜索学习
赵4老师 2017-11-24
  • 打赏
  • 举报
回复
百度搜相关关键字。
jiht594 2017-11-24
  • 打赏
  • 举报
回复
引用 6 楼 zhao1209 的回复:
@paschen,版主我刚刚写了一段程序是将listcontrol数据写入到数据库,可是不知道哪里错了,数据就是写入不进去,您能不能帮我看下,到底是哪里的问题啊。

CString strSQL;
Cscore m_scoreset;
char szBuff[20],szBuff1[20],szBuff2[20];
int nItem=0; //读取ListCtrl中的行
int count=0; //计数,共入库的记录条数
try
{
if(m_scoreset.IsOpen())
m_scoreset.Close();
strSQL.Format("select * from score where stuid='%s'",m_stuid);
m_scoreset.Open(CRecordset::snapshot,strSQL);

while(nItem<m_list.GetItemCount())
{
CString strname,strage,strcollege,strsalary1,strsalary2,strsalary3;

strname=m_list.GetItemText(nItem,0);
strage=m_list.GetItemText(nItem,1);
strcollege=m_list.GetItemText(nItem,2);
strsalary1=m_list.GetItemText(nItem,3);
strsalary2=m_list.GetItemText(nItem,4);
strsalary3=m_list.GetItemText(nItem,5);
CString vSQL;
CString Name;
//写进数据库sql
vSQL.Format( "SELECT * FROM score WHERE Name='%s' ",strname);
vSQL.Format( "INSERT INTO score(stuid,stuname,stuclass,usualscore,testscore,totalscore) VALUES('%s',%s,'%s',%f,%f,%f)",strname,strage,strcollege,atof(strsalary1),atof(strsalary2),atof(strsalary3));
count+=1;
nItem=nItem+1;
}
m_scoreset.Close();
}
catch(CDBException *e)
{
e->ReportError();
return;
}
CString string;
string.Format("%d",count); //将变量组装到字符串中
MessageBox("共增加记录"+string+"条!!!","提示",MB_ICONASTERISK);
//bool InsertExcel(CString str1,CString str2) ;
MessageBox("入库成功","提示",MB_ICONASTERISK);


看样子你只是把sql语句存入了CString vSQL, 并没有执行啊。
易芒客 2017-11-24
  • 打赏
  • 举报
回复
@paschen,版主我刚刚写了一段程序是将listcontrol数据写入到数据库,可是不知道哪里错了,数据就是写入不进去,您能不能帮我看下,到底是哪里的问题啊。 CString strSQL; Cscore m_scoreset; char szBuff[20],szBuff1[20],szBuff2[20]; int nItem=0; //读取ListCtrl中的行 int count=0; //计数,共入库的记录条数 try { if(m_scoreset.IsOpen()) m_scoreset.Close(); strSQL.Format("select * from score where stuid='%s'",m_stuid); m_scoreset.Open(CRecordset::snapshot,strSQL); while(nItem<m_list.GetItemCount()) { CString strname,strage,strcollege,strsalary1,strsalary2,strsalary3; strname=m_list.GetItemText(nItem,0); strage=m_list.GetItemText(nItem,1); strcollege=m_list.GetItemText(nItem,2); strsalary1=m_list.GetItemText(nItem,3); strsalary2=m_list.GetItemText(nItem,4); strsalary3=m_list.GetItemText(nItem,5); CString vSQL; CString Name; //写进数据库sql vSQL.Format( "SELECT * FROM score WHERE Name='%s' ",strname); vSQL.Format( "INSERT INTO score(stuid,stuname,stuclass,usualscore,testscore,totalscore) VALUES('%s',%s,'%s',%f,%f,%f)",strname,strage,strcollege,atof(strsalary1),atof(strsalary2),atof(strsalary3)); count+=1; nItem=nItem+1; } m_scoreset.Close(); } catch(CDBException *e) { e->ReportError(); return; } CString string; string.Format("%d",count); //将变量组装到字符串中 MessageBox("共增加记录"+string+"条!!!","提示",MB_ICONASTERISK); //bool InsertExcel(CString str1,CString str2) ; MessageBox("入库成功","提示",MB_ICONASTERISK);
paschen 2017-11-24
  • 打赏
  • 举报
回复
引用 4 楼 zhao1209 的回复:
@paschen版主您好,我不太明白那您的意思,您能否讲的更清楚一点
网上搜索C++读写SQL数据库
易芒客 2017-11-24
  • 打赏
  • 举报
回复
@paschen版主您好,我不太明白那您的意思,您能否讲的更清楚一点
易芒客 2017-11-24
  • 打赏
  • 举报
回复
@赵4老师 赵老师,网上确实搜索不到,望您能够指点

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧