如何使用XML向SQL Server 2005批量写入数据:关于XML时间格式
使用的时候只需要:string xml = DbXml.SerializeXml<List<QQVisitorXml>>(list) 即可获取序列化后的xml字符串: <?xml version="1.0"?> <ArrayOfModel> <Model> <UIN>0</UIN> <Name>name0</Name> <Img>img0</Img> <VisitTime>2009-07-17T00:00:00-05:00</VisitTime> </Model> <Model> <UIN>1</UIN> <Name>name1</Name> <Img>img1</Img> <VisitTime>2009-07-17T00:00:00-05:00</VisitTime> </Model> <Model> <UIN>2</UIN> <Name>name2</Name> <Img>img2</Img> <VisitTime>2009-07-17T00:00:00-05:00</VisitTime> </Model> </ArrayOfModel> 2.存储过程里,读取xml到一个临时表#temp里: select c.value('(UIN)[1]','varchar(30)') as uin, c.value('(Name)[1]','varchar(50)') as Name, c.value('(Img)[1]','varchar(200)') as Img, c.value('(VisitTime)[1]','datetime') as VisitTime into #temp from @strxml.nodes('//Model') T(c) --@strxml是存储过程的xml参数 查看本栏目更多精彩内容:http://www.bianceng.cn/database/SQLServer/ 然后就可以对#temp按照普通表进行进一步处理。 我们试着执行这个存储过程。嗯?出错了?! 3.原来,XML的时间标准格式是”年-月-日T时:分:秒-时区” SQL Server2005不支持时区,所以它也不能支持xml的时间格式(倒是支持年-月-日T时:分:秒)。这个问题在SQL server 2008中得到改进,完整支持了xml的时间格式。但是我们数据库是2005,没办法,得想个办法解决。解决办法是把时间字转成字符串,然后截取 年-月-日T时:分:秒,最后再加上东八区的时区数,这样sql修正为: select c.value('(UIN)[1]','varchar(30)') as uin, c.value('(Name)[1]','varchar(50)') as Name, c.value('(Img)[1]','varchar(200)') as Img, dateadd(hour,8,convert(datetime,left(t.c.value('(VisitTime)[1]','varchar(30)'), 19),127)) as VisitTime into #temp from @strxml.nodes('//Model') T(c) --@strxml是存储过程的xml参数 本地测试,成功! 4.放到服务器上测试,执行倒是成功了,可以一查看数据,又出问题了!服务器上插入数据表的时间,和我本地测试数据库的时间,相差8个小时!本地开发环境是windows8,服务器是windows server 2008。开发环境和服务器环境有差异,导致本地获取xml带时区,服务器不带时区。 过于依赖环境,就太危险了!果断放弃时间格式,修改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> [XmlIgnore] //xml序列化时跳过 public DateTime VisitTime { get; set; } [XmlElement("VisitTime")] public string XVisitTime { get { return this.VisitTime.ToString("yyyy-MM-dd HH:mm:ss"); } set { this.VisitTime = DateTime.Parse(value); } } } (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |