C# 我想用C更新数据库中的xml列#

C# 我想用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> } 如何更新我使用上述函数更新

大家好 自从我试图弄清楚如何更新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>
}


如何更新我使用上述函数更新此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。看起来很简单,但我没有尝试使用它,因为时间不在我的网站上。再次感谢