Sql Server xml 类型字段的增删改查
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 类型字段的增删改查的更多相关文章
- sql server连接oracle并实现增删改查
需要一个软件ODAC112040Xcopy_64bit 我连接的oracle是11g r2 sqlserver 是 2016 软件下载 https://pan.baidu.com/s/1OpYmpR ...
- SQL server数据库的链接以及增删改查的操作
1.添加引用using System.Data;using System.Data.SqlData;2.建立于数据库的连接,建议将它做成一个方法,方便多次利用.string sqlconnection ...
- 在SQL Server中对视图进行增删改
原文:在SQL Server中对视图进行增删改 Lesktop开源IM发布以后,有一些网友问及如何在嵌入IM后与自己网站的用户系统整合(即如何让嵌入的IM直接使用网站原有的用户数据库,而不需要将已有的 ...
- Django静态文件配置-request方法-ORM简介-字段的增删改查
app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- 用dom4j解析xml文件并执行增删改查操作
转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...
- Java对XML文档的增删改查
JAVA增删改查XML文件 最近总是需要进行xml的相关操作. 不免的要进行xml的读取修改等,于是上网搜索,加上自己的小改动,整合了下xml的常用操作. 读取XML配置文件 首先我们需要通过Do ...
- XML为数据库进行增删改查(实例)
//增删改查文件 package xml2; import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.Fi ...
- Django ORM字段类型 单表增删改查 万能的双下划线
1.ORM三种模型 模型之间的三种关系:一对一,一对多,多对多. 一对一:实质就是在主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性: 一 ...
随机推荐
- mariadb:InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
mariadb 启动中 InnoDB: Error: log file ./ib_logfile0 is of different size 0 起因:线上正在运行的系统,因为需要调整性能,变更了my ...
- R语言解读一元线性回归模型
转载自:http://blog.fens.me/r-linear-regression/ 前言 在我们的日常生活中,存在大量的具有相关性的事件,比如大气压和海拔高度,海拔越高大气压强越小:人的身高和体 ...
- php封装微信SDK
<?phpclass JSSDK { private $appId = '你公众号的appid'; private $appSecret = '你公众号的appSecret'; public f ...
- 工作上遇到的问题 DEBUG 001
java文件断点跳到对应的class文件解决方式 我也是第一次遇到这个问题,找了很久解决办法.后面找开发组老大才解决. 问题描述: 调试程序,在ExportAction.java文件打断点.debug ...
- github项目配置
准备工作: 下载一个git: https://git-scm.com/downloads 1.登陆到github 登陆地址:https://github.com/login 2.创建新项目 3.配置 ...
- RDCManager(远程登录工具)
1: 2: 3: 4: 5 6 写文不易,转载请注明出处:http://www.cnblogs.com/zszs/p/5662752.html
- servlet学习笔记_2
一.Servlet线程安全问题1.servlet的线程安全问题.servlet引擎采用多线程的模式运行,它为并发的每个访问请求都预备一个线程来相应,但是由于只有一个servlet对象,因此,如果多个线 ...
- Hibernate SQL方言 (hibernate.dialect) Spring配置文件applicationContext.xml
转自:http://www.cnblogs.com/wj-wangjun/archive/2009/10/21/1587624.html Hibernate SQL方言 (hibernate.dial ...
- gulp 插件
原文链接:http://www.mamicode.com/info-detail-517085.html gulp是什么? http://gulpjs.com/ 相信你会明白的! 与著名的构建工具gr ...
- Android文件存储
文件存储是Android中最基本的一种数据存储方式,它不读存储的内容进行任何的格式化处理,所有数据原封不动的保存在文件之中.如果想用文件存储的方式保存一些较为复杂的数据,就需要定义一套自己的格式规范, ...