前几天用VC++,获取SQL中的内容并保存,由于不是很熟悉,走了很多弯路,现在总结哈,希望能给需要的人一些帮助。 直接贴代码。
2014-01-23 01:14
561 查看
前几天用VC++,获取SQL中的内容并保存,由于不是很熟悉,走了很多弯路,现在总结哈,希望能给需要的人一些帮助。
直接贴代码。
直接贴代码。
#include "string" #include "map" //连接SQL引用的 #import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","ADOEOF") using namespace std; //你自己定义的函数 void XXXDlg::YourFun() { // TODO: Add your control notification handler code here ::CoInitialize(NULL); _ConnectionPtr m_pConnection("ADODB.Recordset"); _RecordsetPtr m_pRecordset("ADODB.Recordset"); _CommandPtr m_pCommand; //连接数据库信息,写在ini文件中的,filepath是ini文件的路径 //ini文件内容: //[Info] //Database = driver={SQL Server};Server=数据库电脑ip地址(比如本机127.0.0.1),1433;Database=数据库名称; //name = 数据库名字 //pwd = 你的数据库密码 //filepath1 = F:/ //filepath2 = .txt CString Database; GetPrivateProfileString("Info", "Database", "", Database.GetBuffer(MAX_PATH), MAX_PATH, filepath); //将获取的数据库链接字段,转换成指定格式 _bstr_t strConnect = Database; //数据库连接 try { m_pConnection.CreateInstance(__uuidof(Connection)); CString name; CString pwd; GetPrivateProfileString("Info", "name", "", name.GetBuffer(MAX_PATH), MAX_PATH, filepath); GetPrivateProfileString("Info", "pwd", "", pwd.GetBuffer(MAX_PATH), MAX_PATH, filepath); _bstr_t name1 = name; _bstr_t pwd1 = pwd; HRESULT ConnectResult = m_pConnection->Open(strConnect,name1,pwd1,adModeUnknown); if(SUCCEEDED(ConnectResult)) { MessageBox("连接数据库成功!"); } } catch(_com_error e) { MessageBox("连接数据库失败!"); return; } //查询相关内容信息 try { _bstr_t CommandText = "select a.字段1,b.字段2,b.字段3,b.字段4 from 表名1 a,表名2 b where 相关条件"; //m_pConnection->Execute(CommandText, NULL, adCmdText); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open(CommandText, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); _variant_t 字段1Result; _variant_t 字段2Result; _variant_t 字段3Result; _variant_t 字段4Result; //我是将读出来的信息,保存到txt文件中 //下面是从ini文件中读取保存文件的地址 CString filepath1; CString filepath2; GetPrivateProfileString("Info", "filepath1", "", filepath1.GetBuffer(MAX_PATH), MAX_PATH, filepath); GetPrivateProfileString("Info", "filepath2", "", filepath2.GetBuffer(MAX_PATH), MAX_PATH, filepath); string m1 = filepath1.GetBuffer(0); string m2 = filepath2.GetBuffer(0); CString m3 = m1.c_str(); CString m4 = m2.c_str(); //定义一个map容器以免,重复操作文件的打开关闭操作 map<string, auto_ptr<CStdioFile> > filename; //遍历查询结果,并保存 while(!m_pRecordset->ADOEOF) { 字段1Result = m_pRecordset->GetCollect("字段1"); CString 字段1Results; 字段Results=(LPCSTR)_bstr_t(字段1Result); CString fileEnd = m3 + 字段1Results + m4; //我是以 字段1 为文件名保存其他三个字段的内容 CStdioFile* pfile = NULL; if(filename.find((LPCSTR)fileEnd)!=filename.end()) { pfile = filename[(LPCSTR)fileEnd].get(); } else { pfile = new CStdioFile(fileEnd,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite); filename[(LPCSTR)fileEnd] = auto_ptr<CStdioFile>(pfile); } 字段2Result = m_pRecordset->GetCollect("字段2"); CString 字段2Results; 字段2Results=(LPCSTR)_bstr_t(字段2Result); pfile->SeekToEnd();//先定位到文件尾部 pfile->WriteString(字段2Results);//写入文件 pfile->WriteString("\t");//每个字段内容用talbe键分开 字段3Result = m_pRecordset->GetCollect("字段3"); CString 字段3Results; 字段3Results=(LPCSTR)_bstr_t(字段3Result); pfile->SeekToEnd();//先定位到文件尾部 pfile->WriteString(字段3Results); pfile->WriteString("\t"); 字段4Result = m_pRecordset->GetCollect("字段4"); CString 字段4Results; 字段4Results=(LPCSTR)_bstr_t(字段4Result); pfile->SeekToEnd();//先定位到文件尾部 pfile->WriteString(字段4Results); pfile->WriteString("\r\n");//每条记录一行,记录完换行 m_pRecordset->MoveNext(); //记录完一条记录,指向下一条记录 } //循环关闭打开的文件指针 map<string,auto_ptr<CStdioFile> >::const_iterator map_it = filename.begin(); while(map_it!=filename.end()) { (map_it->second)->Close(); map_it++; } filename.clear(); //MessageBox(s); } catch(_com_error e) { return; } }
相关文章推荐
- 总结下自己的入门学黑之路,希望对各位一些帮助!少走点弯路! --写文时间2011-10-26
- 1 开发一个注重性能的JDBC应用程序不是一件容易的事. 当你的代码运行很慢的时候JDBC驱动程序并不会抛出异常告诉你。 本系列的性能提示将为改善JDBC应用程序的性能介绍一些基本的指导原则,这其中的原则已经被许多现有的JDBC应用程序编译运行并验证过。 这些指导原则包括: 正确的使用数据库MetaData方法 只获取需要的数据 选用最佳性能的功能 管理连
- 近日有需要写点C#程序,有用到Dataset数据集和SQLite数据库,由于我从来就不擅长记各种编程语言的语法,所以在查阅一堆资料后,留下以下内容备忘: 一、SQLite操作,直接贴代码,很简单
- 【转】[转]总结下自己的学黑之路,希望对各位小黑和奋斗在计算机一线的码农们一些帮助!少走点弯路!
- 要在技术和学术上有所成就,现在很多青年人最需要解决的其实不是知识问题,而是心理上的问题,是对“成功”定义的理解。
- 在数据库中能不能像用excel那样直接填表保存进数据库,而不是用SQL语句
- 关系数据库的查询优化策略----总结了一些查询优化的方法,希望可以对大家有所帮助(原创)
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 用$传参时,直接将参数的值放在sql语句中,如:
- 一些总结与思考(聊聊最近,希望对大家有所帮助)
- ORM Querier 基于Transact-SQL解析的代码生成利器 帮助开发人员高效快速生成需要的ORM代码
- 由于要开发新的项目,node.js写下一些问题帮助自己记忆,也希望能帮助到别人
- 周末在写自己很不熟悉的css代码和js代码时候遇见了很多的问题,现在列举说一下(1)
- 现在很多的手机应用,都可能会直接嵌入一个web页面。这样做的好处:一个是功能更新方便,维护起来容易,只需要维护服务器的页面即可,不需要更新客户端;另一个是功能通用,不仅Android可以用,iOS也可
- 周末在写自己很不熟悉的css代码和js代码时候遇见了很多的问题,现在列举说一下(2)
- excle 由于一些内容不可读取。excle无法打开,提示需要修复
- 小明买了一些彩色的气球用绳子串在一条线上,想要装饰房间,每个气球都染上了一种颜色,每个气球的形状都是各不相同的。我们用1到9一共9个数字表示不同的颜色,如12345则表示一串5个颜色各不相同的气球串。但小明希望得到不出现重复颜色的气球串,那么现在小明需要将这个气球串剪成多个较短的气球串,小明一共有多少种剪法?如原气球串12345的一种是剪法是剪成12和345两个气球串。
- 总结一些JS获取窗口事件的代码!
- Android 内存泄露总结(现在列举的情况不是很多,以后会慢慢更新)
- 管理是需要的。我是在99年接触csdn的。那时在csdn上看帖子,订程序员杂志,真是感觉获益非浅,由于工作的原因又一段时间没有上csdn。前几天和别的公司程序员聊天,我无意中说道,可以去csdn找找帮助呀,也许程序上的问题就解决了,他的回答让我吃了一惊,c
- 整理一些需要用到的代码——VC++__MFC窗口的应用