2009-09-29 73 views
1

我使用C#.NET 1.1和SQL Server 2000 ....檢索XML文件中的數據,並插入到數據庫表

我想從XML文件retrive數據和數據存儲到數據庫表。

XML文件:

<information> 
    <data> 
    <id="1"></id> 
    <name>peter</name> 
    <age>25</age> 
    </data> 
</information> 

我DATABSE表

id int, 
name varchar(100), 
age int 
+0

你能在代碼視圖中發佈XML,以便我們可以看到標籤和內容嗎? – 2009-09-29 05:29:10

+0

@maxy:您需要突出顯示您的XML和SQL結構,然後單擊編輯控件工具欄上的「代碼」按鈕(010 101)以使其顯示出來,以便讀者可以正確地看到它! – 2009-09-29 05:36:29

回答

3

第一關 - 你的XML是無效的:

<data> 
    <id="1"></id> 

這不是一個有效的XML結構 - 又該它是?

數據節點上的「ID」屬性? <data id="1">

一個「ID」元素的值在裏面嗎? <data><id>1</id>

有一噸的方法可以做到這一點 - 完全取決於您的情況:

  • 創建一個XML模式,所以你可以反序列化這個XML轉換爲.NET對象 - 如果你有噸效果最好這些文件的導入

  • 使用LINQ到XML如果你在.NET 3.5和高達

  • 使用傳統的XML文檔處理

如果您使用傳統的XML文檔處理,如果您的文件相對較小(因爲它將整個文件加載到內存中),這種方式效果最佳。在這種情況下,你可以這樣做:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("yourfilename.xml"); 

XmlNodeList dataNodes = xmlDoc.SelectNodes("/information/data"); 

foreach(XmlNode node in dataNodes) 
{ 
    int id = Convert.ToInt32(node.SelectSingleNode("id").InnerText); 
    string name = node.SelectSingleNode("name").InnerText; 
    int age = Convert.ToInt32(node.SelectSingleNode("age").InnerText); 

    // insert into database, e.g. using SqlCommand or whatever 
} 

至於插入到數據庫 - 您可以在SqlCommand使用存儲過程或SQL語句 - 完全取決於你。一旦你有了三位信息(身份證,姓名,年齡),你可以用你喜歡的任何方式做。

也有警告字:這包括沒有錯誤檢查什麼!如果一個<data>節點應該不完整或者一個子節點的名稱錯誤,這將會崩潰 - 您還需要提供一些錯誤檢查! (爲了簡化,不)

馬克

2

因爲當XML文件是可見的SQL Server服務,這個工程使用老式的T-SQL,只是調整它插入到你的表。

DECLARE @DOC INT 
DECLARE @XML VARCHAR(MAX) 

-- Dump entire file into variable 
SET @XML = 
( 
    select BulkColumn from openrowset 
     (BULK N'<your filename>' 
      , single_clob) as RuleFile 
) 

-- Prep doc 
EXECUTE sp_xml_preparedocument @DOC OUTPUT, @XML 

-- Return data 
SELECT * 
    FROM OpenXML(@DOC, '<your xpath>', 2) 
    WITH <your table> 

-- Clean up 
EXECUTE sp_xml_removedocument @DOC