您的位置:首页 > 数据库

题 阅读 评论 评论权限 操作 以前实习期间写的一段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();

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐