大家好 从我试图想象如何在我的SQLServer表中更新我的xml列以来一直是这样。好的,为了清楚地理解我想要将每个id增加1。 好的,这是我的Tablename名为Setting(SettingId int pk,Name nVarchar(100),XmlSetting xml)
//我的data.xml
<setting>
<a id=1/>
<b id=2/>
<c id=22>
</setting>
增加此代码的我的C#代码在
之下XmlDocument xdoc = new XmlDocument();
private void SetAttribute(System.Xml.XmlNode node)//this code is running in the memory
{
System.Xml.XmlElement element = node as System.Xml.XmlElement;
if (element != null)
{
int attributeCount = element.Attributes.Count;
for (int i = 0; i < attributeCount; i++)
{
System.Xml.XmlAttribute attribute = element.Attributes[i];
if (string.Compare(attribute.Name, "Id", System.StringComparison.OrdinalIgnoreCase) == 0)
{
int value;
if (int.TryParse(attribute.Value, out value))
{
attribute.Value = (value + 1).ToString();
}
else
{
attribute.Value = "1";
}
}
}
int childNodeCount = element.ChildNodes.Count;
for (int i = 0; i < childNodeCount; i++)
{
SetAttribute(element.ChildNodes[i]);
}
}
}
public void EditXmlFile()
{
xdoc.Load(FILE_NAME);
SetAttribute(xdoc.FirstChild);
return;
}
我要求的是将此代码更新到我的数据库表设置
private void btnUpdate_Click(object sender, EventArgs e)
{
SqlConnection cnn = new SqlConnection("connectionPath");
SqlCommand cmd=new SqlCommand("Update Setting set SettingXml=@Settingxml where settingId=5",cnn);
cmd.Parameters.AddWithValue("@SettingXml","")//this where I am stacked because I am failing
try
{
cnn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
lblmsg.Text = "Error updating Xml " + ex.Message;
}
}
如何更新我使用上面的函数更新此SettingXml列,因为我想将每个id递增1
答案 0 :(得分: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;
您可能会发现使用Linq to XML更容易更新XML - XmlDocument
不是很容易使用。
此外,您当前的XML无效 - 我们假设它看起来像这样:
<setting>
<a id="1"/>
<b id="2"/>
<c id="22"/>
</setting>
然后你可以像这样使用Linq增加你的id:
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();
答案 1 :(得分:0)
如果您使用LINQ,这将更容易。正如@BrokenGlass所指出的,Linq to XML使得更新XML更加清晰,而Linq to SQL将使您的数据库更新更加清晰。看起来应该是这样的。
var dbContext = new MyDbContext();
dbContext.Settings.First(s => s.id == 5).XmlSetting = doc.Elements().First();
dbContext.SubmitChanges();
你应该花一些时间学习Linq,因为它会使这样的事情变得如此简单。
希望这有帮助。