C# 我想用C更新数据库中的xml列#
大家好 自从我试图弄清楚如何更新SQLServer表中的xml列以来,已经有一段时间了。好的,为了清楚的理解,我想将每个id增加1。 好的,这是我的名为Setting的表名(SettingId int pk,Name nVarchar(100),XmlSetting xml) //my data.xmlC# 我想用C更新数据库中的xml列#,c#,sql-server,xml,C#,Sql Server,Xml,大家好 自从我试图弄清楚如何更新SQLServer表中的xml列以来,已经有一段时间了。好的,为了清楚的理解,我想将每个id增加1。 好的,这是我的名为Setting的表名(SettingId int pk,Name nVarchar(100),XmlSetting xml) //my data.xml <setting> <a id=1/> <b id=2/> <c id=22> </setting> } 如何更新我使用上述函数更新
<setting>
<a id=1/>
<b id=2/>
<c id=22>
</setting>
}
如何更新我使用上述函数更新此SettingXml列,因为我想将每个id增加1您必须将更新后的XML作为字符串传递给您的
SqlParameter
,因此类似如下:
SqlCommand cmd=new SqlCommand("Update Setting set SettingXml=@SettingXml where settingId=5",cnn);
cmd.Parameters.Add(new SqlParameter("@SettingXml", SqlDbType.Xml)).Value = xdoc.OuterXml;
<setting>
<a id="1"/>
<b id="2"/>
<c id="22"/>
</setting>
XDocument doc = XDocument.Load("test.xml");
doc.Root
.Elements()
.ToList()
.ForEach(node => node.Attribute("id").Value = (Convert.ToInt32(node.Attribute("id").Value) + 1).ToString());
string xml = doc.ToString();
您可能会发现使用Linq to XML更新XML更容易-XmlDocument
不太容易使用
此外,您当前的XML无效-我们假设它如下所示:
SqlCommand cmd=new SqlCommand("Update Setting set SettingXml=@SettingXml where settingId=5",cnn);
cmd.Parameters.Add(new SqlParameter("@SettingXml", SqlDbType.Xml)).Value = xdoc.OuterXml;
<setting>
<a id="1"/>
<b id="2"/>
<c id="22"/>
</setting>
XDocument doc = XDocument.Load("test.xml");
doc.Root
.Elements()
.ToList()
.ForEach(node => node.Attribute("id").Value = (Convert.ToInt32(node.Attribute("id").Value) + 1).ToString());
string xml = doc.ToString();
您必须将更新后的XML作为字符串传递给
SqlParameter
,如下所示:
SqlCommand cmd=new SqlCommand("Update Setting set SettingXml=@SettingXml where settingId=5",cnn);
cmd.Parameters.Add(new SqlParameter("@SettingXml", SqlDbType.Xml)).Value = xdoc.OuterXml;
<setting>
<a id="1"/>
<b id="2"/>
<c id="22"/>
</setting>
XDocument doc = XDocument.Load("test.xml");
doc.Root
.Elements()
.ToList()
.ForEach(node => node.Attribute("id").Value = (Convert.ToInt32(node.Attribute("id").Value) + 1).ToString());
string xml = doc.ToString();
您可能会发现使用Linq to XML更新XML更容易-XmlDocument
不太容易使用
此外,您当前的XML无效-我们假设它如下所示:
SqlCommand cmd=new SqlCommand("Update Setting set SettingXml=@SettingXml where settingId=5",cnn);
cmd.Parameters.Add(new SqlParameter("@SettingXml", SqlDbType.Xml)).Value = xdoc.OuterXml;
<setting>
<a id="1"/>
<b id="2"/>
<c id="22"/>
</setting>
XDocument doc = XDocument.Load("test.xml");
doc.Root
.Elements()
.ToList()
.ForEach(node => node.Attribute("id").Value = (Convert.ToInt32(node.Attribute("id").Value) + 1).ToString());
string xml = doc.ToString();
如果您使用LINQ,这将非常容易。正如@BrokenGlass指出的那样,LINQtoXML使XML更新更干净,LINQtoSQL也将使数据库更新更干净。应该是这样的
var dbContext = new MyDbContext();
dbContext.Settings.First(s => s.id == 5).XmlSetting = doc.Elements().First();
dbContext.SubmitChanges();
你真的应该花些时间学习Linq,因为它会让事情变得如此简单
希望这有帮助。如果您使用LINQ,这将非常容易。正如@BrokenGlass指出的那样,LINQtoXML使XML更新更干净,LINQtoSQL也将使数据库更新更干净。应该是这样的
var dbContext = new MyDbContext();
dbContext.Settings.First(s => s.id == 5).XmlSetting = doc.Elements().First();
dbContext.SubmitChanges();
你真的应该花些时间学习Linq,因为它会让事情变得如此简单
希望这能有所帮助。老实说,你的格式太乱了……这是他一直以来的第二个问题。老实说,你的格式太乱了…这是他一直以来的第二个问题。让他放松一点。感谢这么有价值的信息,不幸的是,在尝试更新cmd.Parameters.Add(new SqlParameter(@SettingXml),SqlDbType.Xml))这一行之后,我无法访问SetAttribute(System.Xml.XmlNode节点)。Value=xdoc.OuterXml;在XDocument doc=XDocument.Load(“test.xml”)上。ForEach(node=>node.Attribute(“id”).Value=(Convert.ToInt32(node.Attribute(“id”).Value)+1.ToString());感谢您提供了如此宝贵的信息,不幸的是,在尝试更新cmd.Parameters.Add(new SqlParameter(“@SettingXml”,SqlDbType.Xml)).Value=xdoc.OuterXml之后,我无法访问SetAttribute(System.Xml.XmlNode节点);在XDocument doc=XDocument.Load(“test.xml”)上。ForEach(node=>node.Attribute(“id”).Value=(Convert.ToInt32(node.Attribute(“id”).Value)+1.ToString());感谢你的努力,我真的需要给自己时间来学习和实现LinQ到SQL它看起来很简单,但我没有尝试使用它,因为时间不在我的网站上。谢谢你的努力,我真的需要给自己时间来学习和实现LinQ到SQL。看起来很简单,但我没有尝试使用它,因为时间不在我的网站上。再次感谢