Welcome

首页 / 数据库 / SQLServer / 如何使用XML向SQL Server 2005批量写入数据:关于XML时间格式

如何使用XML向SQL Server 2005批量写入数据:关于XML时间格式2014-08-18 cnblogs 夏夜的二进制旅行常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况。存储过程并没有数组、列表之类的参数类型,使用XML类型可妥善解决这个问题。

不过,SQL Server2005对标准xml的支持不足,很多地方需要特别处理。举一个例子说明一下。

这个场景是往存储过程里传递一个xml序列化了的List<Model>。

1.Model的代码如下,这是一个实体类

public class Model{/// <summary>/// UIN/// </summary>[XmlElement("UIN")]public long UIN { get; set; }/// <summary>/// 昵称/// </summary>[XmlElement("Name")]public string Name { get; set; }/// <summary>/// 头像/// </summary>[XmlElement("Img")]public string Img { get; set; }/// <summary>/// 访问时间/// </summary>[XmlElement("VisitTime")]public DateTime VisitTime { get; set; }}
然后我们需要将这个List<Model>序列化成一个xml的字符串。但是SQL Server对xml的命名空间识别是有问题的,.net默认的序列化会出现xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd=http://www.w3.org/2001/XMLSchema

有网友给出了一个完美序列化Sql Server2005支持的xml的类(参考http://www.cnblogs.com/prime/archive/2012/10/11/SQLXML.html):

public static class DbXml{private static readonly XmlSerializerNamespaces Namespaces = new XmlSerializerNamespaces();static DbXml(){//去掉 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"Namespaces.Add(string.Empty, string.Empty);}/// <summary>/// 把一个对象序列化成一个Xml字符串/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <returns></returns>public static string SerializeXml<T>(T obj){XmlSerializer serializer = new XmlSerializer(typeof(T));using (MemoryStream stream = new MemoryStream()){serializer.Serialize(stream, obj, Namespaces);return Encoding.UTF8.GetString(stream.ToArray());}}public static T DeserializeXml<T>(string obj){XmlSerializer serializer = new XmlSerializer(typeof(T));using (StringReader reader = new StringReader(obj)){return (T)serializer.Deserialize(reader);}}}