ASP教程之ADO数据与XML数据间的转换的类
ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。当对现无数据库的数据举行剖析时,常常必要对某一部分的数据举行剖析.此时,利用1.SQL查询剖析器?
但其常常不直不雅,查找某个关头字又必要从头实行新的SQL.
2.SQLXML模板?
但又纷歧定有权限创建新的假造目次,且某些SQL语句SQLXML模板不撑持
数据拆离时也有类似成绩。
特别当分歧收集,分歧情况,必要从头导进数据,举行剖析或拆离,坚苦尤其分明。
能不克不及有一种办法,能够将数据离开于数据库举行剖析,必要时再导进到数据库中?
XML是个很好的选择!
ADO自己撑持数据到XML的转换,只必要对其格局举行剖析,成为本人的XML文件通用格局,就能够举行当地剖析
而对通用XML格局举行数据库映照,便可完成数据从头导进数据库的事情.
上面是一个ADO数据(表的基础数据)与XML数据间的互相转换的类(ASP完成),开端完成表数据的导进、导出。
通用表间干系映照(经由过程XSD形貌),思索当中,但愿列位见教指导,不堪感谢.
一个挪用类的例子:
example.asp
<!--#includefile="transformXML.asp"-->
<%
DimaSQL(1,1)
DimoXMLData
======毗连数据库历程======
取得数据库毗连工具oDbConn
======毗连数据库历程======
aSQL(0,0)="PubLable"
aSQL(0,1)="Select*fromPubLabelwherecLabelNamelike%abc%OrderbynLabelID"
aSQL(1,0)="PubUser"
aSQL(1,1)="Select*fromPubUserwherecUserNamelike%abc%OrderbynUserID"
setoXMLData=NewTransformData
CallExport()
CallImport()
setoXMLData=nothing
//当工具属性有默许值(default())时,能够不必在赋值
SubExport()//导出数据
oXMLData.aSQlData=aSQL
必需2维SQL语句数组
oXMLData.bIsSave=1
default(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)ThennErrCode(毛病代码)为0,运转乐成
Response.WriteoXMLData.GetErrExegesis(oXMLData.nErrCode)
nErrCode(毛病代码),经由过程办法GetErrExegesis()取得正文
EndIF
EndSub
SubImport()//导进数据
oXMLData.sXMLFile="Data.xml"必需数据源XML文件(包括绝对路径)
oXMLData.sVacancyCols="nLabelID"必需指定某些字段的值能够不导进(屏障字段)
格局"nID,dDate"(以‘,’分开字段)
oXMLData.Import(oDbConn)
IF(oXMLData.nErrCode=0)Then
Response.Write"数据导进乐成!"
Else
Response.WriteoXMLData.GetErrExegesis(oXMLData.nErrCode)
EndIF
EndSub
%>
类的代码:
TransformData.asp
<%
ClassTransformData
*****************************************************
Copyright(c)2003
创建人:moonpiazza
日期:2003.5.21
描述:ADO数据与XML数据间的转换(ASP完成)
版本:1.0
功能:ADO数据(表的基础数据)与XML数据间的互相转换
待改进:表间数据的联系关系性(通用),数据量年夜时速率成绩
版权:接待改善,翻版不究:_)
*****************************************************
*****************************************************
大众办法:Export,Import,GetErrExegesis
*****************************************************
=============================大众变量End=============================
Privatem_oXMLDOM
Privatem_oXSLDOM
=============================大众变量Begin=============================
=============================毛病代码界说Begin=============================
Privatem_nErrCode_NotArray
Privatem_nErrCode_XMLDOM
Privatem_nErrCode_ReadData
Privatem_nErrCode_WriteData
Privatem_nErrCode_Save
Privatem_nErrCode_EnsFile
Privatem_nErrCode_ErrFile
=============================毛病代码界说End=============================
=============================属性界说Begin=============================
Privatem_aSQlData
Privatem_bIsSave
Privatem_bIsOutput
Privatem_sSaveFileName
Privatem_sSaveFilePath
Privatem_sXMLFile
Privatem_sVacancyCols
Privatem_nErrCode
Privatem_sEncoding
Privatem_sImportSQL
*****************************************************
属性:aSQlData
形态:可写
范例:2维数组
形貌:SQL语句数组,1维是表称号,2维是响应SQL语句
*****************************************************
PublicPropertyLetaSQlData(ByRefp_aSQlData)
m_aSQlData=p_aSQlData
EndProperty
*****************************************************
属性:bIsSave
形态:可写
范例:数字(0,1)default(1)
形貌:导出数据时,是不是保留为XML文件
*****************************************************
PublicPropertyLetbIsSave(ByRefp_bIsSave)
m_bIsSave=Cint(p_bIsSave)
EndProperty
*****************************************************
属性:bIsOutput
形态:可写
范例:数字(0,1)default(0)
形貌:导出数据时,是不是显现XML数据
*****************************************************
PublicPropertyLetbIsOutput(ByRefp_bIsOutput)
m_bIsOutput=Cint(p_bIsOutput)
EndProperty
*****************************************************
属性:sSaveFileName
形态:可写,可读
范例:字符串default(GetRndFileName())
形貌:导出数据时,假如保留XML数据,XML文件称号
*****************************************************
PublicPropertyLetsSaveFileName(ByRefp_sSaveFileName)
m_sSaveFileName=p_sSaveFileName
EndProperty
PublicPropertyGetsSaveFileName()
sSaveFileName=m_sSaveFileName
EndProperty
*****************************************************
属性:sSaveFilePath
形态:可写,可读
范例:字符串default("")
形貌:导出数据时,假如保留XML数据,XML文件路径(绝对路径)
*****************************************************
PublicPropertyLetsSaveFilePath(ByRefp_sSaveFilePath)
m_sSaveFilePath=p_sSaveFilePath
EndProperty
PublicPropertyGetsSaveFilePath()
sSaveFilePath=m_sSaveFilePath
EndProperty
*****************************************************
属性:sXMLFile
形态:可写
范例:字符串
形貌:导进数据时,数据源XML文件(包括绝对路径)
*****************************************************
PublicPropertyLetsXMLFile(ByRefp_sXMLFile)
m_sXMLFile=p_sXMLFile
EndProperty
*****************************************************
属性:sVacancyCols
形态:可写
范例:字符串default("")
格局"nID,dDate"(以‘,’分开字段)
形貌:导进数据时,指定某些字段的值能够不导进(屏障字段)
*****************************************************
PublicPropertyLetsVacancyCols(ByRefp_sVacancyCols)
m_sVacancyCols=","&p_sVacancyCols&","
EndProperty
*****************************************************
属性:nErrCode
形态:可读
范例:数字default(0)
形貌:毛病代码,可经由过程办法GetErrExegesis(ByRefp_nErrCode)取得正文
*****************************************************
PublicPropertyGetnErrCode()
nErrCode=m_nErrCode
EndProperty
*****************************************************
属性:sEncoding
形态:可写
范例:字符串default("gb2312")
形貌:XML文件编码范例
*****************************************************
PublicPropertyLetsEncoding(ByRefp_sEncoding)
m_sEncoding=p_sEncoding
EndProperty
*****************************************************
属性:sImportSQL
形态:可读
范例:字符串default("gb2312")
形貌:导进数据时,天生的SQL语句
*****************************************************
PublicPropertyGetsImportSQL()
sImportSQL=m_sImportSQL
EndProperty
=============================属性界说End=============================
*****************************************************
初始化类
*****************************************************
PrivateSubClass_Initialize()
Server.ScriptTimeout=1000
m_nErrCode_NotErr=0
m_nErrCode_NotArray=1
m_nErrCode_XMLDOM=2
m_nErrCode_ReadData=3
m_nErrCode_WriteData=4
m_nErrCode_Save=5
m_nErrCode_EnsFile=6
m_nErrCode_ErrFile=7
m_bIsSave=1
m_bIsOutput=0
m_sSaveFilePath=""
m_sSaveFileName=""
m_sXMLFile=""
m_sVacancyCols=""
m_nErrCode=m_nErrCode_NotErr
m_sEncoding="gb2312"
EndSub
*****************************************************
刊出类
*****************************************************
PrivateSubClass_Terminate()
Setm_oXMLDOM=Nothing
Setm_oXSLDOM=Nothing
EndSub
=============================数据导出Begin=============================
*****************************************************
历程:Export(ByRefp_oDbConn)
形貌:导出数据
参数:
p_oDbConn:数据库毗连工具
*****************************************************
PublicSubExport(ByRefp_oDbConn)
DimnI,nMaxI
DimsTableName,sSQL
DimsDataXML,sXSLStr
DimsXMLStr
If(NotIsArray(m_aSQlData))Then
m_nErrCode=m_nErrCode_NotArray
ExitSub
EndIf
ONERRORRESUMENEXT
Setm_oXSLDOM=Server.CreateObject("Microsoft.XMLDOM")
Setm_oXMLDOM=Server.CreateObject("Microsoft.XMLDOM")
IfErr.Number0Then
m_nErrCode=m_nErrCode_XMLDOM
ExitSub
EndIf
sXSLStr=GetXSL()
m_oXMLDOM.async=false
m_oXSLDOM.async=false
m_oXSLDOM.loadxml(sXSLStr)
sDataXML="<?xmlversion=1.0encoding="&m_sEncoding&"?>"
sDataXML=sDataXML&"<DataBase>"
nMaxI=Ubound(m_aSQlData,1)
FornI=0TonMaxI
sTableName=m_aSQlData(nI,0)
If(Len(sTableName)>0)Then
sSQL=m_aSQlData(nI,1)
sXMLStr=GetDataXML(sTableName,sSQL,p_oDbConn)
IF(m_nErrCode>m_nErrCode_NotErr)Then
ExitSub
EndIF
sDataXML=sDataXML&sXMLStr
EndIf
Next
sDataXML=sDataXML&"</DataBase>"
IF(m_bIsOutput)Then
CallResponseXML(sDataXML)
EndIF
IF(m_bIsSave)Then
CallSaveDataXML(sDataXML)
EndIF
EndSub
*****************************************************
函数:GetRndFileName()
形貌:取得随机称号,由以后工夫和7位随机数字组成
*****************************************************
PrivateFunctionGetRndFileName()
DimnMax,nMin
DimsRnd,sDate
Randomize
nMin=1000000
nMax=9999999
sRnd=Int(((nMax-nMin+1)*Rnd)+nMin)
sDate=Replace(Replace(Replace(now(),"-",""),":",""),"","")
GetRndFileName="_"&sDate&sRnd&".xml"
EndFunction
*****************************************************
函数:GetXSL()
形貌:取得XSL文件字符串
*****************************************************
PrivateFunctionGetXSL()
DimsXSLStr
sXSLStr=""
sXSLStr=sXSLStr&"<?xmlversion=1.0encoding="&m_sEncoding&"?>"
sXSLStr=sXSLStr&"<xsl:stylesheetversion=1.0xmlns:xsl=http://www.w3.org/1999/XSL/Transformxmlns:s=uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882xmlns:dt=uuid:C2F41010-65B3-11d1-A29F-00AA00C14882xmlns:rs=urn:schemas-microsoft-com:rowsetxmlns:z=#RowsetSchema>"
sXSLStr=sXSLStr&"<xsl:outputomit-xml-declaration=yes/>"
sXSLStr=sXSLStr&"<xsl:templatematch=/>"
sXSLStr=sXSLStr&"<xsl:for-eachselect=/xml/rs:data/z:row>"
sXSLStr=sXSLStr&"<xsl:elementname=Row>"
sXSLStr=sXSLStr&"<xsl:for-eachselect=@*>"
sXSLStr=sXSLStr&"<xsl:attributename={name()}>"
sXSLStr=sXSLStr&"<xsl:value-ofselect=./>"
sXSLStr=sXSLStr&"</xsl:attribute>"
sXSLStr=sXSLStr&"</xsl:for-each>"
sXSLStr=sXSLStr&"</xsl:element>"
sXSLStr=sXSLStr&"</xsl:for-each>"
sXSLStr=sXSLStr&"</xsl:template>"
sXSLStr=sXSLStr&"</xsl:stylesheet>"
GetXSL=sXSLStr
EndFunction
*****************************************************
函数:GetDataXML(ByRefp_sTableName,ByRefp_sSQL,ByRefp_oDbConn)
形貌:实行单条SQL,取得数据转换后的XML
参数:
1.p_sTableName:表的称号
2.p_sSQL:读取数据的SQl语句
3.p_oDbConn:数据库毗连工具
*****************************************************
PrivateFunctionGetDataXML(ByRefp_sTableName,ByRefp_sSQL,ByRefp_oDbConn)
DimoRecordset
DimsXMLStr,sCleanXML
DimnEnsData
ONERRORRESUMENEXT
nEnsData=0
SetoRecordset=p_oDbConn.Execute(p_sSQL)
IfErr.Number0Then
m_nErrCode=m_nErrCode_ReadData
ExitFunction
EndIf
IF(NotoRecordset.eof)Then
nEnsData=1
EndIF
IF(nEnsData=1)Then
oRecordset.savem_oXMLDOM,1
oRecordset.close
SetoRecordset=Nothing
sCleanXML=m_oXMLDOM.transformNode(m_oXSLDOM)
sXMLStr="<"&p_sTableName&">"
sXMLStr=sXMLStr&sCleanXML
sXMLStr=sXMLStr&"</"&p_sTableName&">"
Else
sXMLStr="<"&p_sTableName&"/>"
EndIF
GetDataXML=sXMLStr
EndFunction
*****************************************************
历程:SaveDataXML(ByRefp_sXMLStr)
形貌:保留XML格局的字符串到文件
参数:
p_sXMLStr:XML格局的字符串
*****************************************************
PrivateSubSaveDataXML(ByRefp_sXMLStr)
DimsFileInfo
If(Len(m_sSaveFileName)=0)Then
m_sSaveFileName=GetRndFileName()
EndIf
If(Len(m_sSaveFilePath)=0)Then
sFileInfo=m_sSaveFileName
Else
IF(Right(m_sSaveFilePath,1)="/")Then
sFileInfo=m_sSaveFilePath&m_sSaveFileName
Else
sFileInfo=m_sSaveFilePath&"/"&m_sSaveFileName
EndIF
EndIf
m_oXMLDOM.loadxml(p_sXMLStr)
ONERRORRESUMENEXT
m_oXMLDOM.save(Server.MapPath(sFileInfo))
IfErr.Number0Then
m_nErrCode=m_nErrCode_Save
ExitSub
EndIf
EndSub
*****************************************************
历程:ResponseXML(ByRefp_sXMLStr)
形貌:输入XML格局的字符串到扫瞄器
参数:
p_sXMLStr:XML格局的字符串
*****************************************************
PrivateSubResponseXML(ByRefp_sXMLStr)
Response.CharSet=m_sEncoding
Response.ContentType="text/xml"
Response.writep_sXMLStr
EndSub
=============================数据导出End=============================
=============================数据导进Begin=============================
*****************************************************
历程:Import(ByRefp_oDbConn)
形貌:导进数据
参数:
p_oDbConn:数据库毗连工具
*****************************************************
PublicSubImport(ByRefp_oDbConn)
DimoRootNode
If(Len(m_sXMLFile)<1)Then
m_nErrCode=m_nErrCode_EnsFile
ExitSub
EndIf
ONERRORRESUMENEXT
Setm_oXMLDOM=Server.CreateObject("Microsoft.XMLDOM")
IfErr.Number0Then
m_nErrCode=m_nErrCode_XMLDOM
ExitSub
EndIf
m_oXMLDOM.async=false
m_oXMLDOM.load(Server.MapPath(m_sXMLFile))
IfErr.Number0Then
m_nErrCode=m_nErrCode_EnsFile
ExitSub
EndIf
If(Len(m_oXMLDOM.xml)<1)Then
m_nErrCode=m_nErrCode_ErrFile
ExitSub
EndIf
SetoRootNode=m_oXMLDOM.documentElement
Setm_oXMLDOM=Nothing
m_sImportSQL=GetImportSQL(oRootNode)
SetoRootNode=Nothing
Callp_oDbConn.Execute(m_sImportSQL)
IfErr.Number0Then
m_nErrCode=m_nErrCode_WriteData
ExitSub
EndIf
EndSub
*****************************************************
函数:GetImportSQL(ByRefp_oDataBase)
形貌:取得将XML数据转换为SQL后的字符串
参数:
p_oDataBase:XML文件的根节点
*****************************************************
PrivateFunctionGetImportSQL(ByRefp_oDataBase)
DimoTable,oRow,oDatas,oData
DimsColNames,sColValues
DimsColName
DimsSQL
sSQL=""
ForEachoTableInp_oDataBase.childNodes
ForEachoRowInoTable.childNodes
SetoDatas=oRow.selectNodes("@*")
sColNames=""
sColValues=""
ForEachoDataInoDatas
sColName=oData.nodeName
If(Instr(Lcase(Cstr(m_sVacancyCols)),Lcase(Cstr(","&sColName&",")))<1)Then
sColNames=sColNames&sColName&","
sColValues=sColValues&""&oData.nodeValue&","
EndIf
Next
sColNames="("&Left(sColNames,Len(sColNames)-2)&")"
sColValues="("&Left(sColValues,Len(sColValues)-2)&")"
sSQL=sSQL&"InsertInto"&oTable.nodeName
sSQL=sSQL&""&sColNames&"Values"&sColValues&";"
Next
Next
SetoData=Nothing
SetoDatas=Nothing
SetoRow=Nothing
SetoTable=Nothing
GetImportSQL=sSQL
EndFunction
=============================数据导进End=============================
*****************************************************
函数:GetErrExegesis(ByRefp_nErrCode)
形貌:取得毛病代码的正文
参数:
p_oDataBase:XML文件的根节点
*****************************************************
PublicFunctionGetErrExegesis(ByRefp_nErrCode)
DimsExegesis
DimnErrCode
nErrCode=Cint(p_nErrCode)
SelectCase(nErrCode)
Casem_nErrCode_NotErr
sXSLStr="运转乐成!"
Casem_nErrCode_NotArray
sXSLStr="属性:SQL语句数组不准确!"
Casem_nErrCode_XMLDOM
sXSLStr="不克不及创立XML文档,服务器必需撑持MSXML!"
Casem_nErrCode_ReadData
sXSLStr="读取数据库数据产生毛病!"&"<BR>"
sXSLStr=sXSLStr&"请反省"&""
sXSLStr=sXSLStr&"1.数据库是不是已毗连"&""
sXSLStr=sXSLStr&"2.语句是不是准确"
Casem_nErrCode_WriteData
sXSLStr="写进数据库数据产生毛病!"&"<BR>"
sXSLStr=sXSLStr&"请反省"&""
sXSLStr=sXSLStr&"1.数据库是不是已毗连"&""
sXSLStr=sXSLStr&"2.SQL语句是不是准确"&"<BR>"
sXSLStr=sXSLStr&"SQL语句"&"<BR><BR>"
sXSLStr=sXSLStr&""&m_sImportSQL
Casem_nErrCode_Save
sXSLStr="不克不及保留XML文档,请反省是不是对该目次或文件有写进权限!"
Casem_nErrCode_EnsFile
sXSLStr="不克不及读取XM数据,XML文件不存在!"
sXSLStr=sXSLStr&"文件:"&m_sXMLFile
Casem_nErrCode_ErrFile
sXSLStr="不克不及读取XM数据,XML文件格局毛病!"
sXSLStr=sXSLStr&"文件:"&m_sXMLFile
CaseElse
sXSLStr="未知毛病!"
EndSelect
GetErrExegesis="<BR>"&sXSLStr&"<BR>"
EndFunction
EndClass
%>
想法是和程序员的想法不一样的.至于为什么.大家去想一想.跟心理学有关的 封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: 你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 没有坚实的理论做基础,那么我们连踏入社会第一步的资本都没有,特别对于计算机专业的学生学好专业知识是置关重要的。在这里我侧重讲一下如何学习ASP,从平时的学习过程中。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。 多看多学多思。多看一些关于ASP的书籍,一方面可以扩展知识面一方面可以鉴借别人是如何掌握、运用ASP的;多学善于关注别人,向同学老师多多学习,不论知识的大小;多思则是要将学到的知识灵活运用。 先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习
页:
[1]