簡體   English   中英

使用VB.NET 2010從XML文件數據插入和更新SQL表

[英]Insert & Update SQL Table from XML file data using VB.NET 2010

我一直在研究和編寫/重寫程序來完成此任務已有一個星期了。 我需要對此進行一些合作,以提出我以前從未有過的東西。 具體來說,我們每天都會向我們發送一個自動生成的XML文件,其記錄約為70k(大小約為75MB)。我被要求在其中一台服務器(SQL)上制作一張包含此信息的表,以便查詢。 另外,該程序必須更新現有記錄(如果數據已更改)並每天插入新記錄。 記錄不能從數據庫中刪除

這是我嘗試過的方法列表(到目前為止)以及它們不起作用的原因。

  1. SQLXMLBulkLoad-這對於導入數據非常有用。 但是,批量加載類的局限性在於它不能更新和/或插入。 是時候重寫了。

  2. SQL OpenRowSet(使用SQLCommand等)-這不起作用,因為服務器,程序和XML文件將全部3放在不同的計算機上。 可以將這些設備配置為允許彼此訪問文件(特別是服務器),但是該方法被認為“不現實,開銷太大”。

  3. 合並數據集,然后合並TableAdapter.Update-最初似乎確實可以使用此方法。 這個想法很簡單,使用DataSet.XMLRead()方法將XML數據放入數據集中的表中,然后將SQL表添加到數據集中(使用SQLCommand等),合並兩個表,然后使用Table將表更新/插入現有SQL表的適配器。 此方法似乎不起作用,因為XML文件有兩個包含日期的節點(列)。 不幸的是,SQL和XML之間沒有統一的Date數據類型。 我什至嘗試將所有日期格式從XML文件更改為DateTime SQL格式,這種方法雖然有效,但在運行時仍然認為數據類型不匹配異常。

在這一點上,我沒有主意。 這似乎是肯定已經完成的任務。 我並不一定要找人為我編寫此代碼(我完全有能力這樣做),我只需要在該主題上進行一些協作即可。

謝謝

我們對以XML格式接收的數據庫導入執行類似的操作,而我所做的只是將XML直接傳遞到存儲過程,然后使用XQuery和OPENXML切碎XML。

這兩種技術都使您可以查詢SQL中的XML,就像它是數據庫中的表一樣。 采用這種方法,您可以將XML傳遞給腳本或存儲過程,在SQL中對其進行查詢,然后在需要的地方插入結果。 有趣的是, OPENXML更適合處理大型XML文件 ,但是您可以嘗試兩者並看看它們如何為您工作。 以下是使用OPENXML和簡單合並語句的示例。

create procedure ImportXml
(
    @importXml xml
)
as
--with OPENXML you have to prepare the document before you use it
--this is unecessary with XQuery
DECLARE @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @importXml;

--this is just a typical Merge statement that will update data if it exists
--and insert it if it does not
merge NormalDataTable
using
(
     --here is where you are querying the XML document directly.  You can 
     --see, it works just like a SQL statement, with a special syntax for
     --specifying where to get data out of the XML document and how to map
     --it to a table structure
     select *
     from openxml(@idoc, '/Root/Element')
     with
     (
         ElementID int '@ElementID',
         ElementValueName varchar(50) '@ElementValueName'
     ) 
) source
on NormalDataTable.ElementID = source.ElementID
when not matched then
    insert ...
when matched then
    update ...

exec sp_xml_removedocument @idoc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM