• 服务器端生成xml的方法


    1)      方法一:利用XmlReader,以流的方式生成

    Public Function GetArchives() As String

            
    Dim cSql As String

            
    Dim Constr_ZT As String = Application("ConStr"& "zt" & Session("LOGZTID"& "sysinfo"

            
    Dim Cycn As New SqlClient.SqlConnection(Constr_ZT)

            
    Dim Cycmd As SqlClient.SqlCommand = New SqlClient.SqlCommand

            
    Dim CydSet As DataSet = New DataSet

            
    Dim Cyadp As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(cSql, Cycn)

    Dim Cysb As System.Text.StringBuilder = New System.Text.StringBuilder

            
    Try

                Cycn.Open()

                Cycmd.Connection 
    = Cycn

                Cysb 
    = New System.Text.StringBuilder

                Cyadp.SelectCommand.Connection 
    = Cycn

     

                
    '客户档案 

                cSql 
    = "SELECT * FROM customer_list ORDER BY frem"

                Cyadp.SelectCommand.CommandText 
    = cSql

                Cyadp.Fill(CydSet, 
    "cus")

                
    '供应商

                cSql 
    = "SELECT * FROM vendor_list ORDER BY frem"

                Cyadp.SelectCommand.CommandText 
    = cSql

                Cyadp.Fill(CydSet, 
    "pro")

               

     

                
    '为各表字段设置属性类型,如不设置将以节点的形式返回

                
    Dim i, Ci As Integer

                
    For i = 0 To CydSet.Tables.Count - 1 Step 1

                    
    For Ci = 0 To CydSet.Tables(i).Columns.Count - 1 Step 1

    CydSet.Tables(i).Columns(CydSet.Tables(i).Columns(Ci).ColumnName).ColumnMapping 
    = MappingType.Attribute

                    
    Next

                
    Next

     

    '生成xml数据

                Cysb.Append(
    Replace(CydSet.GetXml, "NewDataSet""root"))

                CydSet.Reset()

     

                
    Return Cysb.ToString()  

     

            
    Catch ex As Exception

                
    If Cycn.State = ConnectionState.Open Then Cycn.Close()

                
    Return ""

            
    End Try

        
    End Function


     

     

    例:

     

     

    For XML

     SQL 语句表达式:

    SELECT

    FROM

    WHERE

    ORDER BY

    FOR XML (raw | auto [, ELEMENTS] |

                      explicit)

            [, XMLData]

            [, BINARY base64])

     

     

     

     

    for xml raw”与“for xml auto”的区别:

    n    for xml raw

    ¨           在结果集中每一行有一个 元素

    ¨           没有嵌套的子元素

    ¨           在结果集中的列/值表示成 元素的特性/

    ¨           和数据库的结果集很类似,但表示成XML 格式,很容易转换

    n    for xml auto

    ¨           数据库中的表/视图名表示成元素名

    ¨           列名用来表示特性,如果加ELEMENTS 选项,列表示成子元素

    ¨           支持嵌套的 XML 输出结果,结果集中的层次结构(元素的嵌套)基于 SELECT 子句中指定的列所标识的表顺序

    ¨           可以用表和列别名来改变元素和特性名

     

     

    2)      方法二:利用DataSet,以块的方式生成


    Public Function A() As String

            
    Dim cSql As String

            
    Dim Constr_ZT As String = Application("CONSTR"& "zt" & Session("LOGZTID"& "sysinfo" 

            
    Dim Cycn As New SqlClient.SqlConnection(Constr_ZT)

            
    Dim Cycmd As New SqlClient.SqlCommand("", Cycn)

            
    Try

                Cycn.Open()

                Cycmd.Connection 
    = Cycn

     

                
    Dim Cyreader As System.Xml.XmlReader = Cycmd.ExecuteXmlReader()

                
    Dim Cysb As System.Text.StringBuilder = New System.Text.StringBuilder

     

                Cysb.Append(
    "")

     

                cSql 
    = "select * from customer_list order by frem for xml raw"

                Cycmd.CommandText 
    = cSql

                Cyreader.Read()

                
    While Not Cyreader1.EOF

                    Cysb.Append(Cyreader.ReadOuterXml())

                
    End While

                Cyreader.Close()

                Cycn.Close()

     

    cSql 
    = "select * from vendor_list order by frem for xml raw"

                Cycmd.CommandText 
    = cSql

                Cyreader.Read()

                
    While Not Cyreader1.EOF

                    Cysb.Append(Cyreader.ReadOuterXml())

                
    End While

                Cyreader.Close()

                Cycn.Close()

                Cysb.Append(
    "")

     

                
    Return Cysb.ToString()   ''形成XML数据岛

            
    Catch ex As Exception

                
    If Cycn.State = ConnectionState.Open Then Cycn.Close()

                
    Return ""

            
    End Try

    End Function



    3)      方法一与方法二的比较

    n    方法一适合小批量的数据查询,当数据量较大的时候,方法二的速度会快些。

    n    web 服务器资源要求:方法一低,方法二高。

     

  • 相关阅读:
    面试题--十进制转换成2进制
    c++基础--如何将函数作为参数传递
    面试题--完全二叉树的的最后一层的最右节点
    数据库原理--故障恢复
    数据库原理--事务并发控制
    数据库原理--事务(一)
    数据库原理--1nf 2nf 3nf
    数据库原理--外键和主键
    数据库原理--函数依赖和范式
    人人都有极客精神
  • 原文地址:https://www.cnblogs.com/xiang/p/254637.html
Copyright © 2020-2023  润新知