题 阅读 评论 评论权限 操作 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之五 导入xml格式文档数据到数据库
2012-11-11 15:48
706 查看
void CXMLwithSQLDlg::OnBnClickedCinput()
{
m_list.DeleteAllItems();
FieldsPtr fields;
CString strColName;
BSTR bstrColName;
long ColCounti;
_RecordsetPtr Rset;
CFileException e;
CString strFileName;
try
{
Rset = m_ado.CreRecordset();
HRESULT h = Rset->get_Fields(&fields);
if(SUCCEEDED(h))
{
fields->get_Count(&ColCounti);
}
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot;
MSXML2::IXMLDOMElementPtr xmlNode;
//创建DOMDocument对象
HRESULT hr = pDoc.CreateInstance(_uuidof(MSXML2::DOMDocument30));
if(!SUCCEEDED(hr))
{
MessageBox("Error");
return;
}
//读取xml格式路径选择字符串
CFileDialog FileLog(TRUE,"xml",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"xml(*.xml)|*.xml|所有文件(*.*)|*.*||",NULL);
if(FileLog.DoModal() == IDOK)
{
strFileName = FileLog.GetFileName();
}
//加载xml文档
pDoc->load((char*)(_bstr_t)strFileName);
xmlRoot = pDoc->GetdocumentElement();
MSXML2::IXMLDOMNodeListPtr nodeList = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
xmlRoot->get_childNodes(&nodeList);
long iCount;
nodeList->get_length(&iCount);
/*解析xml文档并把数据添加到数据库中*/
for(int t = 0;t < iCount/11;t++)
{
long i = 0;
Rset->AddNew();
VARIANT varval;
fields->Item[i]->get_Name(&bstrColName);
nodeList->get_item(0+t*11,&pAttrItem);
pAttrItem->get_nodeTypedValue(&varval);
CString strValue = (char*)(_bstr_t) varval;
//添加数据到数据库
Rset->PutCollect(bstrColName, _variant_t (strValue));
i++;
///////////////////////
nodeList->get_item(1+t*11, &pAttrItem);
MSXML2::IXMLDOMNodeListPtr nodeList1 = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem1;
pAttrItem->get_childNodes(&nodeList1);
long iCount1;
nodeList1->get_length(&iCount1);
for(int j = 0;j < iCount1;j++)
{
fields->Item[i]->get_Name(&bstrColName);
nodeList1->get_item(j, &pAttrItem1);
pAttrItem1->get_nodeTypedValue(&varval);
CString strValue1 = (char*)(_bstr_t) varval;
Rset->PutCollect(bstrColName, _variant_t (strValue1));
i++;
}
///////////////////////
nodeList->get_item(2+t*11, &pAttrItem);
MSXML2::IXMLDOMNodeListPtr nodeList2 = NULL;
//单个节点集合
MSXML2::IXMLDOMNodePtr pAttrItem2;
//创建节点列表
pAttrItem->get_childNodes(&nodeList2);
long iCount2;
nodeList2->get_length(&iCount2);
for(int m = 0;m < iCount2;m++)
{
fields->Item[i]->get_Name(&bstrColName);
nodeList2->get_item(m, &pAttrItem2);
pAttrItem2->get_nodeTypedValue(&varval);
CString strValue2= (char*)(_bstr_t) varval;
Rset->PutCollect(bstrColName, _variant_t (strValue2));
i++;
}
//////////////////////////
for(int n = 3+t*11;n < 11+t*11;n++)
{
fields->Item[i]->get_Name(&bstrColName);
nodeList->get_item(n, &pAttrItem);
pAttrItem->get_nodeTypedValue(&varval);
CString strValue3 = (char*)(_bstr_t) varval;
Rset->PutCollect(bstrColName, _variant_t (strValue3));
i++;
}
//更新数据库
Rset->Update();
}
AfxMessageBox("导入成功");
pDoc.Release();//释放内存
}
catch(_com_error e)
{
e.Description();
}
}
{
m_list.DeleteAllItems();
FieldsPtr fields;
CString strColName;
BSTR bstrColName;
long ColCounti;
_RecordsetPtr Rset;
CFileException e;
CString strFileName;
try
{
Rset = m_ado.CreRecordset();
HRESULT h = Rset->get_Fields(&fields);
if(SUCCEEDED(h))
{
fields->get_Count(&ColCounti);
}
MSXML2::IXMLDOMDocumentPtr pDoc;
MSXML2::IXMLDOMElementPtr xmlRoot;
MSXML2::IXMLDOMElementPtr xmlNode;
//创建DOMDocument对象
HRESULT hr = pDoc.CreateInstance(_uuidof(MSXML2::DOMDocument30));
if(!SUCCEEDED(hr))
{
MessageBox("Error");
return;
}
//读取xml格式路径选择字符串
CFileDialog FileLog(TRUE,"xml",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"xml(*.xml)|*.xml|所有文件(*.*)|*.*||",NULL);
if(FileLog.DoModal() == IDOK)
{
strFileName = FileLog.GetFileName();
}
//加载xml文档
pDoc->load((char*)(_bstr_t)strFileName);
xmlRoot = pDoc->GetdocumentElement();
MSXML2::IXMLDOMNodeListPtr nodeList = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem;
xmlRoot->get_childNodes(&nodeList);
long iCount;
nodeList->get_length(&iCount);
/*解析xml文档并把数据添加到数据库中*/
for(int t = 0;t < iCount/11;t++)
{
long i = 0;
Rset->AddNew();
VARIANT varval;
fields->Item[i]->get_Name(&bstrColName);
nodeList->get_item(0+t*11,&pAttrItem);
pAttrItem->get_nodeTypedValue(&varval);
CString strValue = (char*)(_bstr_t) varval;
//添加数据到数据库
Rset->PutCollect(bstrColName, _variant_t (strValue));
i++;
///////////////////////
nodeList->get_item(1+t*11, &pAttrItem);
MSXML2::IXMLDOMNodeListPtr nodeList1 = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem1;
pAttrItem->get_childNodes(&nodeList1);
long iCount1;
nodeList1->get_length(&iCount1);
for(int j = 0;j < iCount1;j++)
{
fields->Item[i]->get_Name(&bstrColName);
nodeList1->get_item(j, &pAttrItem1);
pAttrItem1->get_nodeTypedValue(&varval);
CString strValue1 = (char*)(_bstr_t) varval;
Rset->PutCollect(bstrColName, _variant_t (strValue1));
i++;
}
///////////////////////
nodeList->get_item(2+t*11, &pAttrItem);
MSXML2::IXMLDOMNodeListPtr nodeList2 = NULL;
//单个节点集合
MSXML2::IXMLDOMNodePtr pAttrItem2;
//创建节点列表
pAttrItem->get_childNodes(&nodeList2);
long iCount2;
nodeList2->get_length(&iCount2);
for(int m = 0;m < iCount2;m++)
{
fields->Item[i]->get_Name(&bstrColName);
nodeList2->get_item(m, &pAttrItem2);
pAttrItem2->get_nodeTypedValue(&varval);
CString strValue2= (char*)(_bstr_t) varval;
Rset->PutCollect(bstrColName, _variant_t (strValue2));
i++;
}
//////////////////////////
for(int n = 3+t*11;n < 11+t*11;n++)
{
fields->Item[i]->get_Name(&bstrColName);
nodeList->get_item(n, &pAttrItem);
pAttrItem->get_nodeTypedValue(&varval);
CString strValue3 = (char*)(_bstr_t) varval;
Rset->PutCollect(bstrColName, _variant_t (strValue3));
i++;
}
//更新数据库
Rset->Update();
}
AfxMessageBox("导入成功");
pDoc.Release();//释放内存
}
catch(_com_error e)
{
e.Description();
}
}
相关文章推荐
- 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之三 导出数据库数据为xml格式自定义
- 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之四 读取xml格式文档到界面
- 以前实习期间写的一段mfc编程,对数据库和xml格式文档的相关操作 主要相关代码 之一连接数据库
- Android数据库Cursor操作:I… 分类: Android数据存储 2014-05-30 10:58 70人阅读 评论(0) 收藏
- winform Execl数据 导入到数据库(SQL) 分类: WinForm C# 2014-05-09 20:52 191人阅读 评论(0) 收藏
- MFC:结合文档和视图使用数据库类和其他相关数据库编程
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- android中的数据库操作ZZ 分类: Android数据存储 2014-05-30 10:58 88人阅读 评论(0) 收藏
- 用exp_imp远程操作数据库,附帶Oracle数据导入导出imp/exp詳解
- MFC中使用sqlite3操作数据库 创建,插入数据,查询数据
- EXCEL数据导入SQL2008相关操作
- 使用navicat 8实现创建数据库和导入数据 管理用户与权限[图文方法]
- 数据库创建、数据泵导入导出等操作
- 线程同步(信号量,互斥,条件变量) 分类: linux应用程序 2008-04-08 09:43 2587人阅读 评论(1) 收藏 举报 进行多线程编程,最头疼的就是那些共享的数据。因为你无法知道哪个线程会在哪个时候对它进行操作,你也无法
- 利用itext操作pdf从数据库导出大量数据--创建PDF相关(二)
- 【转载】linux中误删除oracle数据文件的恢复操作 分类: H2_ORACLE 2013-06-14 12:07 353人阅读 评论(0) 收藏
- c#将Excel数据导入到数据库的实现代码
- 将Excel数据快速大批量导入数据库的代码
- LS代码导入Excel数据到Domino数据库[C/S]
- c#将Excel数据导入到数据库的实现代码