程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何使用XML向SQL Server 2005批量寫入數據:關於XML時間格式

如何使用XML向SQL Server 2005批量寫入數據:關於XML時間格式

編輯:關於SqlServer

常常遇到需要向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);
        }
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved