1.定義表結構html
在MSSM中新建數據庫表CommunicateItem,定義其中一個字段ItemContentXml 爲xml類型sql
2.編輯表數據,新增一行,發現xml類型不能經過設計器錄入數據。數據庫
須要寫sql更新或插入。app
DECLARE @xml XML SET @xml=' <MyHobby> <MyCode>1</MyCode> <MyName>登山</MyName> </MyHobby> <MyHobby> <MyCode>2</MyCode> <MyName>游泳</MyName> </MyHobby> <MyHobby> <MyCode>3</MyCode> <MyName>美食</MyName> </MyHobby> ' UPDATE dbo.CommunicateItem SET ItemContentXml=@xml WHERE CommunicateItemId=1;
在第一個<MyHobby>節點以前添加一個節點編碼
UPDATE dbo.CommunicateItem SET ItemContentXml.modify('insert <MyHobby><MyCode>0</MyCode></MyHobby> as first into(/)')
WHERE CommunicateItemId=1;
在<MyCode>0</MyCode>以後添加 <MyName>第一個</MyName>spa
UPDATE dbo.CommunicateItem SET ItemContentXml.modify('insert <MyName>第一個</MyName> as last into(/MyHobby)[1]') WHERE CommunicateItemId=1;
刪除剛添加的節點 <MyHobby><MyCode>0</MyCode><MyName>第一個</MyName></MyHobby>.net
UPDATE dbo.CommunicateConfig SET ItemContentXml.modify('delete /MyHobby[1]') WHERE CommunicateItemId=1;
3.查詢XML類型節點數據設計
SELECT * FROM CommunicateItem ci WHERE ci.ItemContentXml.exist('(/MyHobby/MyName[text()="第一個"])')=1 AND ci.ItemContentXml.exist('(/MyHobby/MyName[text()="登山"])')=1
4.C#寫入和讀取Xml類型code
在sql server2005以及以後的sql server中引入了Xml數據類型,在C#中使用Xml數據類型須要指定參數類型爲SqlDbType,參數值類型須要用SqlXml,以下示例:server
假定有一種表A,A表有兩個字段:ID 類型 int,Data 類型 Xml,我要用C#往表中插入一行記錄:
static void InsertA(int aid, string contentXml) { //ConnString是鏈接字符串,須要額外定義 using (SqlConnection conn = new SqlConnection(ConnString)) { conn.Open(); string sql = "INSERT INTO [A] ([ID],[Content])VALUES(@id,@content)"; using (SqlCommand comm = new SqlCommand(sql, conn)) { using (XmlTextReader rdr = new XmlTextReader(contentXml, XmlNodeType.Document, null)) { SqlXml sqlXml = new SqlXml(rdr); SqlParameter parmID = new SqlParameter("@id", aid); SqlParameter parmContent = new SqlParameter("@content", SqlDbType.Xml, sqlXml.Value.Length); parmContent.Value = sqlXml; comm.Parameters.Add(parmID); comm.Parameters.Add(parmContent); comm.ExecuteNonQuery(); } } conn.Close(); } }
插入數據時須要用SqlXml數據類型做爲參數值,但讀出Xml類型數據時的C#數據類型是string。以下示例:
string GetContent(int id) { string sql = "SELECT [Content] FROM [A] WHERE [ID] = " + id; using (SqlConnection conn = new SqlConnection(ConnString)) { conn.Open(); using (SqlCommand comm = new SqlCommand(sql,conn)) { string xml = (string)comm.ExecuteScalar(); return xml; } } }
須要注意的是,在插入數據時Xml字段的參數值類型不能夠爲string,直接用string會報編碼錯誤異常。
參考文檔:
0.XQuery/XPath應用
http://www.cnblogs.com/fuhongwei041/archive/2008/09/23/1297420.html
1.SQL Server操做XML系列
http://www.cnblogs.com/leep2007/category/392443.html
2.Sql Server參數化查詢之where in和like實現之xml和DataTable傳參
http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html
3.靈活運用 SQL SERVER FOR XML PATH
http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html
4.cross apply & outer apply
http://blog.csdn.net/htl258/article/details/4537421
5.SQL XML類型的查詢
http://www.cnblogs.com/stevenshi/archive/2009/11/26/1611458.html
6.18個小實例入門SQLServer XML查詢
http://www.cnblogs.com/huyong/archive/2012/01/18/2685599.html
7.SQL Server2008 XML增刪改查
http://blog.csdn.net/szstephenzhou/article/details/8270116
8.SQL Server對Xml字段的操做
http://blog.csdn.net/w174504744/article/details/8200329
9.SQL Server XML應用實例
http://blog.csdn.net/liangck/article/details/3335158