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();
}
}