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. 理解LSTM网络

    转载自:http://blog.csdn.net/ycheng_sjtu/article/details/48792467

  2. libevent源码分析:time-test例子

    time-test例子是libevent自带的一个例子,通过libevent提供的定时事件来实现,间隔固定时间打印的功能. /* * gcc -g -o time-test time-test.c - ...

  3. Android混淆打包

    一.理论知识   ProGuard是一款免费的Java类文件压缩器.优化器和混淆器.它能发现并删除无用类.字段(field).方法和属性值(attribute).它也能优化字节码并删除无用的指令.最后 ...

  4. JS汉语转拼音脚本

    测试代码: var anhui = "安徽"; //获得全拼 pinyin.getFullChars(anhui); //获得首拼 pinyin.getCamelChars(anh ...

  5. 5.对与表与表之间的关系,efcore是如何处理的

    public class Account { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Accoun ...

  6. in_array,array_search的使用

    写一个数组里面有小写a-z 大写A-Z 以及数字,把相似的数字和字母都剔除     无论大小写:将括号内的数字剔除(0,o,2,Z,1,i) $arr1 = range("a", ...

  7. 防止SQL注入的方法

    方法1⃣️addslashes(); $username=addslashes($_POST['username']); 方法2⃣️mysql_escape_string(); 方法3⃣️开启魔术引号 ...

  8. java subList方法小记

    在java中,我们有时候需要对一个list进行拆分处理,这个时候就需要用到list的切割方法subList. 我们知道list里面的序号起始是从0开始的,所以一个含有23条数据的list,它的序号是从 ...

  9. Deep Learning 23:dropout理解_之读论文“Improving neural networks by preventing co-adaptation of feature detectors”

    理论知识:Deep learning:四十一(Dropout简单理解).深度学习(二十二)Dropout浅层理解与实现.“Improving neural networks by preventing ...

  10. 重写toString()方法来描述一个类

    package com.zch.test; /* toString方法以及重写toString方法 toString方法是一个自我描述方法 方法本身返回的是该对象的实现类的 类名 + @ + hash ...