1.定义表结构

在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型

2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据。

需要写sql更新或插入。

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>

 UPDATE dbo.CommunicateItem SET ItemContentXml.modify('insert  <MyName>第一个</MyName> as last into(/MyHobby)[1]')
WHERE CommunicateItemId=1;

删除刚添加的节点 <MyHobby><MyCode>0</MyCode><MyName>第一个</MyName></MyHobby>

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类型

在sql server2005以及之后的sql server中引入了Xml数据类型,在C#中使用Xml数据类型需要指定参数类型为SqlDbType,参数值类型需要用SqlXml,如下示例:

假定有一种表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

Sql Server xml 类型字段的增删改查的更多相关文章

  1. sql server连接oracle并实现增删改查

    需要一个软件ODAC112040Xcopy_64bit 我连接的oracle是11g r2  sqlserver 是 2016 软件下载 https://pan.baidu.com/s/1OpYmpR ...

  2. SQL server数据库的链接以及增删改查的操作

    1.添加引用using System.Data;using System.Data.SqlData;2.建立于数据库的连接,建议将它做成一个方法,方便多次利用.string sqlconnection ...

  3. 在SQL Server中对视图进行增删改

    原文:在SQL Server中对视图进行增删改 Lesktop开源IM发布以后,有一些网友问及如何在嵌入IM后与自己网站的用户系统整合(即如何让嵌入的IM直接使用网站原有的用户数据库,而不需要将已有的 ...

  4. Django静态文件配置-request方法-ORM简介-字段的增删改查

    app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...

  5. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  6. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  7. Java对XML文档的增删改查

    JAVA增删改查XML文件   最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...

  8. XML为数据库进行增删改查(实例)

    //增删改查文件 package xml2; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.Fi ...

  9. Django ORM字段类型 单表增删改查 万能的双下划线

    1.ORM三种模型 模型之间的三种关系:一对一,一对多,多对多. 一对一:实质就是在主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性: 一 ...

随机推荐

  1. 贪吃蛇,JavaScript,效果,鼠标事件

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>鼠 ...

  2. 【前端】Three.js

    Three.js 基本概念 渲染器(Renderer) 渲染器将和Canvas元素进行绑定 场景(Scene) 在Three.js中添加的物体都是添加到场景中的,因此它相当于一个大容器.一般说,场景里 ...

  3. sharepoint 2013 开发环境安装

    Sharepoint 介绍 Sharepoint 可以帮助企业用户轻松完成日常工作中诸如文档审批.在线申请等业务流程,同时提供多种接口实现后台业务系统的集成,它将 Office 桌面端应用的优势结合 ...

  4. 小识Tableau

    关于 Tableau Tableau 帮助人们将数据转化为可以付诸行动的见解.探索无所不能的可视化分析.只需点击几下即可构建仪表板,进行即兴分析. Tableau与R对比: 1.从开发的角度讲,Tab ...

  5. HDU 5860 Death Sequence(死亡序列)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  6. PHP的基本排序算法

    1 冒泡排序 <?php /** * 冒泡排序(从小到大) * 基本思想:两两比较相邻记录,一次循环确定一个数 * 在所有的排序算法中是最慢的,尤其当数据量较大的时候,数据小体现不出来 */ $ ...

  7. 老王讲自制RPC框架.(四.序列化与反序列化)

    #(序列化) 在实际的框架中,真正影响效率的就是数据的传输方式,以及传输的准备,或者说是tcp与http,序列化.当然要想提高整个框架的效率,需要采用一种高效的序列化 框架比如流行的protostuf ...

  8. centos 开机启动服务

    一.启动脚本 /etc/rc.local 启动 最简单的一种方式,在启动脚本 /etc/rc.local (其实 /etc/rc.local 是/etc/rc.d/rc.local 的软链接文件,实际 ...

  9. 7 -- Spring的基本用法 -- 3...

    7.3 Spring 的核心机制 : 依赖注入 Spring 框架的核心功能有两个. Spring容器作为超级大工厂,负责创建.管理所有的Java对象,这些Java对象被称为Bean. Spring容 ...

  10. pom.xml里有红叉报错的解决办法

    pom.xml里有红叉报错的解决办法一: 1.把鼠标点在报的错上发现pom.xml报如下错误: Multiple annotations found at this line: - Failure t ...