sql查询返回xml数据之应用【转载】
測試步驟:
1.?????? 創建測試數據,以用戶表為例,創建語句和添加數據語句如下:?
?? /*創建表*/
CREATE TABLE [dbo].[Users](
??? [ID] [int] IDENTITY(1,1) NOT NULL,
??? [UserID] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
??? [UserName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
??? [Address] [varchar](260) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
??? [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
-----------------插入測試數據
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ('su20090812001','kevin','beijing')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912002','zhangsan','tianjin')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090701234','wangwu','shanghai')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912004','lisi','beijing')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912005','jialiu','hebei')
INSERT [Users] ( [UserID],[UserName],[Address]) VALUES ( 'su20090912007','qianlong','zhejiang')
復制代碼
2.??
?? 在sql server management studio 中溫習下 sql 查詢加for xml后的結果集,主要是參考Using the FOR XML Clause to Return Query Results as XML文內容,在sql 語句結束處加for xml auto root(‘xxx’) elements等等。
?? (1):sql 語句:SELECT * FROM Users u?? FOR XML raw
執行結果如下:????
<row ID="1" UserID="su20090812001" UserName="kevin" Address="beijing" />
<row ID="2" UserID="su20090912002" UserName="zhangsan" Address="tianjin"/>
<row ID="3" UserID="su20090701234" UserName="wangwu" Address="shanghai"/>
<row ID="4" UserID="su20090912004" UserName="lisi" Address="beijing"/>
<row ID="5" UserID="su20090912005" UserName="jialiu" Address="hebei"/>
<row ID="6" UserID="su20090912007" UserName="qianlong" Address="zhejiang"/>
復制代碼
??
(2):Sql語句:SELECT*FROM Users u?? FOR XML RAW('User')
<User ID="1" UserID="su20090812001" UserName="kevin" Address="beijing" />
<User ID="2" UserID="su20090912002" UserName="zhangsan" Address="tianjin"/>
<User ID="3" UserID="su20090701234" UserName="wangwu" Address="shanghai"/>
<User ID="4" UserID="su20090912004" UserName="lisi" Address="beijing"/>
<User ID="5" UserID="su20090912005" UserName="jialiu" Address="hebei"/>
復制代碼
<User ID="6" UserID="su20090912007" UserName="qianlong" Address="zhejiang" />
? (3):Sql 語句SELECT * FROM Users u FOR XML RAW('User'),ROOT('Users'),elements 不在copy 執行結果了,大家自己執行下就可以看到效果了。
3.?????? 在ASP.NET中如何獲取這種形式的數據集呢。主要用到xmlreader(xmlTextReader),這里以xmlreader為例,
在程序代碼中,主要用是用SqlCommand對象ExecuteXmlReader()方法,
下面是
具體的實現代碼:
using System.Web.UI.WebControls;
using System.Xml;
using System.Data;
using System.Data.SqlClient;
using System.Text;
public partial class xmlUser : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??????? if (!Page.IsPostBack)
??????? {
??????????? GetUserXml();
??????? }
??? }
??? private void GetUserXml()
??? {
??????? SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=kevin;database=demo;");
??????? SqlCommand cmd = new SqlCommand("SELECT * FROM Users u FOR XML RAW('User'),ROOT('Users'),elements",conn);
??????? XmlReader myreader = null;
??????? try
??????? {
??????????? conn.Open();
??????????? myreader = cmd.ExecuteXmlReader();
??????????? StringBuilder sb = new StringBuilder();
??????????? myreader.MoveToElement();
??????????? while (myreader.IsStartElement())
??????????? {?? ///讀取xml部分
??????????????? sb.Append(myreader.ReadOuterXml());
??????????? }
??????????? ///顯示xml的內容
??????????? Response.Write(Server.HtmlEncode(sb.ToString()).Replace("\n", "<br>"));
??????? }
??????? catch(SqlException err)
??????? {
??????????? //寫日志略
??????????
??????? }
??????? finally
??????? {
??????????? conn.Close();
??????? }
??? }
}
復制代碼
??運行結果:
<Users>
<User><ID>1</ID><UserID>su20090812001</UserID><UserName>kevin</UserName><Address>beijing</Address></User>
<User><ID>2</ID><UserID>su20090912002</UserID><UserName>zhangsan</UserName><Address>tianjin</Address></User>
<User><ID>3</ID><UserID>su20090701234</UserID><UserName>wangwu</UserName><Address>shanghai</Address></User>
<User><ID>4</ID><UserID>su20090912004</UserID><UserName>lisi</UserName><Address>beijing</Address></User>
<User><ID>5</ID><UserID>su20090912005</UserID><UserName>jialiu</UserName><Address>hebei</Address></User>
<User><ID>6</ID><UserID>su20090912007</UserID><UserName>qianlong</UserName><Address>zhejiang</Address></User>
</Users>
??
得到sql 返回的xml格式的數據,以前我的那個項目拼接成的xml格式的字符串就可以省去一大部分拼接代碼。沒有測試過是在程序這邊拼接效率好還是數據庫返回xml
數據效率好,但編寫的程序代碼是減少很多。有興趣的同學幫忙測測這兩種方式哪種效率更好些呢。歡迎大家扔磚頭。
參考:
Using the FOR XML Clause to Return Query Results as XML?
http://www.simple-talk.com/content/article.aspx?article=720
?
如何使用SQLSERVER2000中的XML功能
http://www.legalsoft.com.cn/docs/docs/11/1001.html
使用ExecuteXMLReader()讀取XML片段
http://blog.csdn.net/sunhaiwei_andy/archive/2008/04/14/2289586.aspx 原地址:http://www.cnblogs.com/liushanshan/archive/2011/04/14/2016209.html posted on 2010-12-14 23:49 搏擊的小船 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/guanjie20/archive/2010/12/14/2288219.html
總結
以上是生活随笔為你收集整理的sql查询返回xml数据之应用【转载】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1升油等于多少斤:1升胡麻油相当几斤?
- 下一篇: Http和Socket连接区别(ZT)