http://community.csdn.net/Expert/topic/3589/3589961.xml?temp=.8356897
帖子没拿到分的过来拿分

解决方案 »

  1.   

    最后,为该类添加ExecuteSqlXmlSelect()方法,该方法如下: public string ExecuteSqlXmlSelect(string CustomerID, string
      ConnectionString, bool ClientSide)
    {
    // 创建一个SqlXmlCommand对象
       SqlXmlCommand cmd = new SqlXmlCommand(ConnectionString);
       cmd.RootTag = "Customers";
       cmd.ClientSideXml = ClientSide;
       cmd.CommandText = "SELECT * FROM Customers WHERE CustomerID =
        '" + CustomerID + "' FOR XML RAW";
     // 执行SqlXmlCommand对象的ExecuteXmlReader操作以取得一个XmlReader对象
       XmlReader xr = cmd.ExecuteXmlReader();
     // 创建一个XmlDocument对象
       XmlDocument xd = new XmlDocument();
     // 运用其Load方法将获取的XML数据载入到一个DOM中并返回XML数据的字符串形式
       xd.Load(xr);
       return xd.OuterXml
     }
     
      SQLXML托管类是SQLXML 3.0包的一部分,SQLXML 3.0包扩展了SQL Server 2000的XML功能。SQLXML托管类是原生的.NET类,它提供了通过编程方法访问XML数据的功能。上面的ExecuteSqlXmlSelect()方法首先运用数据库连接字符串创建一个SqlXmlCommand对象。同时,由FOR XML子句获取的XML数据往往只是一个XML片段,并不是结构良好(Well-Formed)的XML数据,要使得XML成为结构良好的,你必须设定SqlXmlCommand对象的RootTag属性。在本实例中,我们将该属性设置为"Customers"。   以前版本的SQLXML包是在服务器端生成XML数据,然后传递给客户端的。这样,因为服务器端返回的XML数据流远远大于原来的二进制格式数据流,所以就产生了一个可扩展性问题。而3.0版本的SQLXML包允许服务器将数据以二进制的格式传递给客户端,然后在客户端将数据进一步转变为XML格式,这样就解决了原来版本中存在的可扩展性问题了。在3.0版本的SQLXML包中实现这个特性的方法很简单,只要将SqlXmlCommand对象的ClientSideXml属性设置为True即可。这样,程序会继续使用带有FOR XML子句的SELECT语句,但是托管类会在发送SQL语句到SQL Server之前将FOR XML子句先剥离掉。数据库就不会发现FOR XML子句,因此从服务器返回给客户端的数据也就是二进制格式的了。客户端获取从服务器返回的数据后,托管类会进而将数据转化为XML格式。   上面的程序中,我们通过执行SqlXmlCommand对象的ExecuteXmlReader()方法来获取一个XmlReader对象,并用它来填充一个XmlDocument对象,最后返回XmlDocument对象的OuterXml属性给调用者。   上面,我给大家介绍了ADO.Net机制、SqlDataReader机制和SQLXML机制这三种不同的方法,下面是运用这三种不同方法所得到的一个结果示意图,从图中的结果读者可以看出那种方法的效率最高。 
      

  2.   

    ado.net oledb odbc sql
    在.net中,我用oledb连接access,用sql连接sql server
    odbc现在不用了,用asp时用,