Sql Server xml 類型字段的增刪改查

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

相關文章
相關標籤/搜索