2011-03-29 59 views
1

嗨全部 一直以來,因爲我試圖figuare出如何更新我的SQLServer表中的XML列。確定了清晰的認識我想1. 每一位ID增加好吧,這是我的表名稱爲設置(SettingId INT PK,名稱爲nvarchar(100),XmlSetting XML)我想更新我的數據庫中的xml列使用C#

//我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 [email protected] 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列,因爲我想在1

+0

老實說,你的格式是相當混亂... – 2011-03-29 15:37:24

+0

這是他有史以來第二個問題。削減他一些鬆懈。 – 2011-03-29 15:41:16

回答

1

你必須增加每個id來更新XML作爲一個字符串傳遞給您的SqlParameter,這樣的東西像這樣:

SqlCommand cmd=new SqlCommand("Update Setting set [email protected] 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> 

然後你就可以增加你的ID的使用LINQ to XML是這樣的:

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(); 
+0

感謝這樣一個有價值的信息,不幸我無法訪問SetAttribute(System.Xml.XmlNode節點)後嘗試更新此行cmd.Parameters.Add(新的SqlParameter(「@ SettingXml」,SqlDbType.Xml))。值= xdoc.OuterXml;並在XDocument doc = XDocument.Load(「test.xml」).......ForEach(node => node.Attribute(「id」)。Value =(Convert.ToInt32(node.Attribute(「id」 ).Value)+ 1).ToString()); – 2011-03-30 09:19:44

+0

感謝人工作感謝萬次 – 2011-03-30 13:05:20

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,因爲它會讓事情變得如此簡單。

希望這會有所幫助。

+0

感謝人的努力我真的需要給自己留出時間研究Linq並將其實施到SQL它看起來很容易,但我沒有嘗試使用它,因爲時間不在我的網站上。再次感謝 – 2011-03-30 14:28:57

相關問題