我现在的数据库文件都是mdf或者mdb格式的。我如何才能将这些数据库文件转换或者导出为xml格式的文件啊?

解决方案 »

  1.   

    用ADO的RECORDSET对象保存为XML文件:
     Set rs = New ADODB.Recordset
     sql="select * from customers"
     rs.Open sql, cn, 1, 3
     rs.Save "c:\tmp.xml", adPersistXML
     Set rs = Nothing
      

  2.   

    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Private Sub Command1_Click()
        rs.CursorLocation = adUseClient
        rs.Open "Select * from students", cn, adOpenStatic, adLockBatchOptimistic
        MsgBox rs.RecordCount
        '保存为XML
        rs.Save "c:\bbb.xml", adPersistXML
        rs.Close
        '读取XML文件
        rs.Open "c:\bbb.xml", cn, adOpenStatic, adLockReadOnly, adCmdFile
        MsgBox rs.RecordCount
        rs.Close
    End SubPrivate Sub Form_Load()
        If cn.State = 1 Then
            cn.Close
        End If
        cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\db1.mdb"
    End Sub
      

  3.   

    数据库文件为什么要转换或者导出为xml格式呢?做什么用?
      

  4.   

    如果是sqlserver 2000 XML 和 Internet 支持  
    FOR XML 子句的使用准则
    FOR XML 子句只有在 SELECT 语句中及受到以下限制时才有效: 无论在 UPDATE、INSERT 或 DELETE 语句、嵌套 SELECT 语句还是其它语句(SELECT INTO、赋值语句)中,FOR XML 在子选择中都无效。例如,不支持下面示例中的子选择: 
    示例 ASELECT *
    FROM Table1
    WHERE ......(SELECT * FROM Table2 FOR XML RAW)示例 BDECLARE @doc nchar(3000)
    SET @doc = (SELECT * FROM Customers WHERE CustomerID = 'ALFKI' FOR XML RAW)对于与 COMPUTE BY 或 FOR BROWSE 子句一起使用的任何选择语句,FOR XML 都无效,例如: 
    SELECT OrderID, UnitPrice 
    FROM [Order Details] 
    ORDER BY OrderID COMPUTE SUM(UnitPrice) BY OrderID当前不支持 GROUP BY 和聚合函数与 FOR XML AUTO 共同使用。例如: 
    SELECT max(price), min(price), avg(price)
    FROM titles
    FOR XML AUTOFOR XML 在用于视图定义或用于返回行集的用户定义函数的 SELECT 语句中无效。例如,不能使用下面的语句: 
    CREATE VIEW AllOrders AS SELECT * FROM Orders FOR XML AUTO但是允许如下的语句:SELECT * FROM ViewName FOR XML AUTO are allowed.FOR XML 无法用于需要在存储过程中进一步处理的选择语句。 
    FOR XML 不能与游标一起使用。
    一般情况下,FOR XML 无法不能不直接将结果输出到 Microsoft® SQL Server™ 2000 客户端的任何选择语句。
    FOR XML 无法用于在 INSERT 语句中调用的存储过程。
    如果带 FOR XML 子句的 SELECT 语句在查询中指定一个由四部分组成的名称,则在本地计算机上执行查询时,在所得到的 XML 文档中将不返回这个服务器名称。但是,当在网络服务器上执行查询时,将返回这个由四部分组成的服务器名称。 
    例如,对于下面的查询:SELECT TOP 1 LastName
    FROM ServerName.Northwind.dbo.Employees
    FOR XML AUTO当 ServerName 是本地服务器时,该查询返回:<Northwind.dbo.Employees LastName="Buchanan"/>当 ServerName 是网络服务器时,该查询返回:<ServerName.Northwind.dbo.Employees LastName="Buchanan"/>通过指定下列别名可避免上述现象:SELECT TOP 1 LastName
    FROM ServerName.Northwind.dbo.Employees x
    FOR XML AUTO 该查询返回:<x ="Buchanan"/>在带 FOR XML AUTO 子句的 SELECT 语句中使用派生表可能不会产生希望的嵌套。 
    当指定使用 FOR XML AUTO 模式的查询时,将实现 FOR BROWSE 模式。FOR XML AUTO 模式使用 FOR BROWSE 模式提供的信息确定结果集中的层次结构。 例如,请看下面的查询。在该查询中创建了派生表 P。SELECT c.CompanyName,
           o.OrderID,
           o.OrderDate,
           p.ProductName,
           p.Quantity,
           p.UnitPrice,
           p.Total
    FROM   Customers AS c
           JOIN
           Orders AS o
           ON
           c.CustomerID = o.CustomerID
           JOIN
           (
             SELECT od.OrderID,
                    pr.ProductName,
                    od.Quantity,
                    od.UnitPrice,
                    od.Quantity * od.UnitPrice AS total
             FROM   Products AS pr
                    JOIN
                    [Order Details] AS od
                    ON
                    pr.ProductID = od.ProductID
           ) AS p
           ON
           o.OrderID = p.OrderID
    FOR XML AUTO下面是部分结果:<c CompanyName="Vins et alcools Chevalier">
      <o OrderID="10248" OrderDate="1996-07-04T00:00:00">
        <pr ProductName="Queso Cabrales">
            <od Quantity="12" UnitPrice="14.0000" total="168.0000"/>
        </pr>
        <pr ProductName="Singaporean Hokkien Fried Mee">
            <od Quantity="10" UnitPrice="9.8000" total="98.0000"/>
        </pr>
    </c>在所得到的 XML 文档中缺少 <p> 元素,且返回 <pr> 和 <od> 元素。发生这种现象的原因是查询优化器在结果中消除 P 表,并返回包含 od 表和 pr 表的结果集。 通过重新编写该查询可避免上述现象。例如,可重新编写该查询以创建一个视图并在 SELECT 语句中使用该视图:CREATE VIEW p AS  
             SELECT od.OrderID,
                    pr.ProductName,
                    od.Quantity,
                    od.UnitPrice,
                    od.Quantity * od.UnitPrice AS total
             FROM   Products AS pr
                    JOIN
                    [Order Details] AS od
                    ON
                    pr.ProductID = od.ProductID然后编写 SELECT 语句:SELECT c.CompanyName,
           o.OrderID,
           o.OrderDate,
           p.ProductName,
           p.Quantity,
           p.UnitPrice,
           p.total
    FROM   Customers AS c
           JOIN
           Orders AS o
           ON
           c.CustomerID = o.CustomerID
           JOIN
            p
           ON
           o.OrderID = p.OrderID
    FOR XML AUTO下面是部分结果:<c CompanyName="Vins et alcools Chevalier">
      <o OrderID="10248" OrderDate="1996-07-04T00:00:00">
        <p ProductName="Queso Cabrales" 
           Quantity="12" 
           UnitPrice="14.0000" 
           total="168.0000"/>
      </o>
    </c>另外,将包含在 XML 名称中无效的字符(如空格)的 SQL Server 名称转换为 XML 名称的方法是将无效字符转换为转义数字实体编码。仅有两个非字母字符可以在 XML 名称的开始位置使用:冒号 (:) 和下划线 (_)。因为冒号 (:) 已经保留给命名空间,所以将下划线 (_) 选作转义符。编码的转义规则是: 不是有效 XML 名称字符(根据 XML 1.0 规范)的任何 UCS-2 字符均转义为 _xHHHH_ 的形式,其中 HHHH 代表字符的四位十六进制 UCS-2 代码,以最高有效位排在最前面的顺序。例如,表名 Order Details 编码为 Order_x0020_Details。
    不符合 UCS-2 领域的字符(介于 U+00010000 和 U+0010FFFF 范围之间的附加 UCS-4 字符)均编码为 _xHHHHHHHH_,其中 HHHHHHHH 代表字符的八位十六进制 UCS-4 编码。
    下划线字符不需要进行转义,除非其后为字符 x。例如,表名 Order_Details 不进行编码。
    标识符中的冒号 (:) 字符不进行编码,以便 FOR XML 查询可以生成命名空间元素和特性名。例如,下列查询在名称中生成包含冒号的命名空间特性: 
    SELECT 'namespace-urn' as 'xmlns:namespace', 
             1 as 'namespace:a' 
    FOR XML RAW该查询产生下列结果:<row xmlns:namespace="namespace-urn" namespace:a="1"/>在 SELECT 查询中,将任何列投影到二进制大对象 (BLOB) 会使该列成为临时实体(丢失相关联的表名和列名)。这使 AUTO 模式查询产生错误,因为它不知道将该值放在 XML 层次结构的何处,例如: 
    CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
    INSERT INTO MyTable VALUES (1, 0x7)因为投影到 BLOB,该查询产生一个错误信息:SELECT Col1,
             CAST(Col2 as image) as Col2
    FROM MyTable
    FOR XML AUTO如果删除投影,该查询将产生预期的结果:SELECT Col1,
             Col2
    FROM MyTable
    FOR XML AUTO结果如下:<Computed Col1="1" Col2="dbobject/Computed[@Col1='1']/@Col2"/> 
    请参见使用 HTTP 执行 SQL 语句使用 HTTP 执行模板文件SELECT&copy;1988-2000 Microsoft Corporation。保留所有权利。