1、ADO数据XML数据间的转换的类ADO数据与XML数据间的转换的类当对现有数据库的数据进行分析时,经常需要对某一部分的数据进行分析.此时,使用1.SQL查询分析器?但其往往不直观,查找某个关键字又需要重新执行新的SQL.2.SQLXML模板?但又不一定有权限建立新的虚拟目录,且某些SQL语句SQLXML模板不支持 数据拆离时也有相似问题。尤其当不同网络,不同环境,需要重新导入数据,进行分析或拆离,困难尤为明显。能不能有一种方法,可以将数据脱离于数据库进行分析,需要时再导入到数据库中?XML是个很好的选择!ADO本身支持数据到XML的转换,只需要对其格式进行解析,成为自己的XML文件通用格式,就
2、可以进行本地分析而对通用XML格式进行数据库映射,就可完成数据重新导入数据库的工作.下面是一个ADO数据(表的基本数据)与XML数据间的相互转换的类(ASP实现),初步完成表数据的导入、导出。通用表间关系映射(通过XSD描述),考虑之中,希望各位赐教指点,不胜感激.一个调用类的例子:example.asp%Dim aSQL(1,1)Dim oXMLData= 连接数据库过程 =获得数据库连接对象 oDbConn= 连接数据库过程 =aSQL(0,0) = PubLableaSQL(0,1) = Select * from PubLabel where cLabelName like %abc%
3、 Order by nLabelIDaSQL(1,0) = PubUseraSQL(1,1) = Select * from PubUser where cUserName like %abc% Order by nUserIDset oXMLData = New TransformDataCall Export()Call Import()set oXMLData = nothing/ 当对象属性有默认值(default()时,可以不用在赋值Sub Export() / 导出数据oXMLData.aSQlData= aSQL 必须2维SQL语句数组oXMLData.bIsSave= 1 de
4、fault(1)是否保存为XML文件oXMLData.bIsOutput= 1 default(0)是否显示XML数据oXMLData.sSaveFileName= Data.xml default(当前时间加随机数)如果保存XML数据,XML文件名称oXMLData.sSaveFilePath= default()如果保存XML数据,XML文件路径(相对路径)oXMLData.sEncoding= gb2312 default(gb2312)XML文件编码类型oXMLData.Export (oDbConn) / 导出数据过程IF (oXMLData.nErrCode0) Then nErr
5、Code(错误代码)为0,运行成功Response.Write oXMLData.GetErrExegesis(oXMLData.nErrCode)nErrCode(错误代码),通过方法GetErrExegesis() 获得注释End IFEnd SubSub Import() / 导入数据oXMLData.sXMLFile= Data.xml 必须数据源XML文件(包含相对路径)oXMLData.sVacancyCols= nLabelID 必须指定某些字段的值可以不导入(屏蔽字段) 格式nID,dDate(以,分隔字段)oXMLData.Import (oDbConn)IF (oXMLDa
6、ta.nErrCode=0) ThenResponse.Write 数据导入成功!ElseResponse.Write oXMLData.GetErrExegesis(oXMLData.nErrCode)End IFEnd Sub% 类的代码:TransformData.asp%Class TransformData*Copyright (c) 2003创 建 人:moonpiazza日期:2003.5.21描述:ADO数据与XML数据间的转换(ASP实现)版本:1.0功能: ADO数据(表的基本数据)与XML数据间的相互转换待 改 进:表间数据的关联性(通用),数据量大时速度问题版权:欢迎改
7、进,翻版不究:_)*公共方法:Export, Import, GetErrExegesis*= 公共变量End =Private m_oXMLDOMPrivate m_oXSLDOM= 公共变量 Begin = 错误代码定义 Begin =Private m_nErrCode_NotArrayPrivate m_nErrCode_XMLDOMPrivate m_nErrCode_ReadDataPrivate m_nErrCode_WriteDataPrivate m_nErrCode_SavePrivate m_nErrCode_EnsFilePrivate m_nErrCode_ErrFi
8、le= 错误代码定义End = 属性定义 Begin =Private m_aSQlDataPrivate m_bIsSavePrivate m_bIsOutputPrivate m_sSaveFileNamePrivate m_sSaveFilePathPrivate m_sXMLFilePrivate m_sVacancyColsPrivate m_nErrCodePrivate m_sEncodingPrivate m_sImportSQL*属性:aSQlData状态:可写类型:2维数组描述:SQL语句数组,1维是表名称,2维是相应SQL语句*Public Property Let aS
9、QlData(ByRef p_aSQlData)m_aSQlData= p_aSQlDataEnd Property*属性:bIsSave状态:可写类型:数字(0,1)default(1)描述:导出数据时,是否保存为XML文件*Public Property Let bIsSave(ByRef p_bIsSave)m_bIsSave= Cint(p_bIsSave)End Property*属性:bIsOutput状态:可写类型:数字(0,1)default(0)描述:导出数据时,是否显示XML数据*Public Property Let bIsOutput(ByRef p_bIsOutput
10、)m_bIsOutput= Cint(p_bIsOutput)End Property*属性:sSaveFileName状态:可写,可读类型:字符串default(GetRndFileName()描述:导出数据时,如果保存XML数据,XML文件名称*Public Property Let sSaveFileName(ByRef p_sSaveFileName)m_sSaveFileName= p_sSaveFileNameEnd PropertyPublic Property Get sSaveFileName()sSaveFileName= m_sSaveFileNameEnd Proper
11、ty*属性:sSaveFilePath状态:可写,可读类型:字符串default()描述:导出数据时,如果保存XML数据,XML文件路径(相对路径)*Public Property Let sSaveFilePath(ByRef p_sSaveFilePath)m_sSaveFilePath= p_sSaveFilePathEnd PropertyPublic Property Get sSaveFilePath()sSaveFilePath= m_sSaveFilePathEnd Property*属性:sXMLFile状态:可写类型:字符串描述:导入数据时,数据源XML文件(包含相对路径)
12、*Public Property Let sXMLFile(ByRef p_sXMLFile)m_sXMLFile= p_sXMLFileEnd Property*属性:sVacancyCols状态:可写类型:字符串default()格式nID,dDate(以,分隔字段)描述:导入数据时,指定某些字段的值可以不导入(屏蔽字段)*Public Property Let sVacancyCols(ByRef p_sVacancyCols)m_sVacancyCols= , & p_sVacancyCols & ,End Property*属性:nErrCode状态:可读类型:数字 default(
13、0)描述:错误代码,可通过方法GetErrExegesis(ByRef p_nErrCode) 获得注释*Public Property Get nErrCode()nErrCode= m_nErrCodeEnd Property*属性:sEncoding状态:可写类型:字符串default(gb2312)描述:XML文件编码类型*Public Property Let sEncoding(ByRef p_sEncoding)m_sEncoding= p_sEncodingEnd Property*属性:sImportSQL状态:可读类型:字符串default(gb2312)描述:导入数据时,
14、生成的SQL语句*Public Property Get sImportSQL()sImportSQL= m_sImportSQLEnd Property= 属性定义 End =*初始化类*Private Sub Class_Initialize()Server.ScriptTimeout = 1000m_nErrCode_NotErr= 0m_nErrCode_NotArray= 1m_nErrCode_XMLDOM= 2m_nErrCode_ReadData= 3m_nErrCode_WriteData= 4m_nErrCode_Save= 5m_nErrCode_EnsFile= 6m_
15、nErrCode_ErrFile= 7m_bIsSave= 1m_bIsOutput= 0m_sSaveFilePath= m_sSaveFileName= m_sXMLFile= m_sVacancyCols= m_nErrCode= m_nErrCode_NotErrm_sEncoding= gb2312End Sub*注销类*Private Sub Class_Terminate()Set m_oXMLDOM= NothingSet m_oXSLDOM= NothingEnd Sub= 数据导出 Begin =*过程:Export(ByRef p_oDbConn)描述:导出数据参数:p_
16、oDbConn:数据库连接对象*Public Sub Export(ByRef p_oDbConn)Dim nI, nMaxIDim sTableName, sSQLDim sDataXML, sXSLStrDim sXMLStrIf (Not IsArray(m_aSQlData) Thenm_nErrCode= m_nErrCode_NotArrayExit SubEnd IfON ERROR RESUME NEXTSet m_oXSLDOM= Server.CreateObject(Microsoft.XMLDOM)Set m_oXMLDOM= Server.CreateObject(M
17、icrosoft.XMLDOM)If Err.Number 0 Thenm_nErrCode= m_nErrCode_XMLDOMExit SubEnd IfsXSLStr= GetXSL()m_oXMLDOM.async= falsem_oXSLDOM.async= falsem_oXSLDOM.loadxml(sXSLStr)sDataXML= sDataXML= sDataXML & nMaxI= Ubound(m_aSQlData, 1)For nI=0 TonMaxIsTableName= m_aSQlData(nI, 0)If (Len(sTableName) 0) ThensSQ
18、L= m_aSQlData(nI, 1)sXMLStr= GetDataXML(sTableName, sSQL, p_oDbConn)IF (m_nErrCode m_nErrCode_NotErr) ThenExit SubEnd IFsDataXML= sDataXML & sXMLStrEnd IfNextsDataXML= sDataXML & IF (m_bIsOutput) ThenCall ResponseXML(sDataXML)End IFIF (m_bIsSave) ThenCall SaveDataXML(sDataXML)End IFEnd Sub*函数:GetRnd
19、FileName()描述:获得随机名称,由当前时间和7位随机数字构成*Private Function GetRndFileName()Dim nMax, nMinDim sRnd, sDateRandomizenMin= 1000000nMax= 9999999sRnd= Int( ( (nMax - nMin + 1) * Rnd ) + nMin)sDate= Replace( Replace( Replace( now(), -, ) , :, ), , )GetRndFileName= _ & sDate & sRnd & .xmlEnd Function*函数:GetXSL()描述
20、:获得XSL文件字符串*Private Function GetXSL()Dim sXSLStrsXSLStr= sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sXSLStr= sXSLStr & sX
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1