国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
SQL Server2000的OpenXML特性

SQL Server2000的OpenXML特性

[日期:2005-07-08]來源:CSDN  作者:[字體: ]

SQL Server2000OpenXML特性

 

SQL Server2000提供了OpenXML特性,我們可以很方便的用OpenXML特性來代替?zhèn)鹘y(tǒng)的行集結(jié)果,同樣我們也可以使用定義好的XML文檔作為輸入的數(shù)據(jù),這樣也為我們的數(shù)據(jù)移植帶來的巨大的便利。

同時,SQL Server2000中也提供了存儲過程,用微軟的話說,只有設(shè)計成存儲過程,才算是”cleaner separation of code from the middle-tier”,這樣做是很好的。應(yīng)用程序訪問數(shù)據(jù)庫的數(shù)據(jù)并不是直接的與數(shù)據(jù)庫表打交道,而是通過存儲過程的運行來獲取所需要的數(shù)據(jù)。這樣的設(shè)計有一個好處就是,避免了頻繁的表操作,而通過運行在服務(wù)器端的存儲過程可以極大的提高運作效率和提升訪問數(shù)據(jù)的速度,同時也很好的屏蔽了數(shù)據(jù)庫表的邏輯,使得數(shù)據(jù)庫訪問變成了數(shù)據(jù)庫提供的服務(wù)訪問。

既然OpenXML和存儲過程都可以提高SQL Server2000的性能,那么能否把這種技術(shù)結(jié)合起來了?答案是肯定的,下面我們就來看看怎么在存儲過程中使用OpenXML.

以下是一個使用了OpenXML特性的存儲過程:

*******************************************************************************

 

-------------------------------------------------------------------------------

-- upArchiveMsgInsertMsg

-------------------------------------------------------------------------------

/******************************************************************************

     這是一個公文消息xml文檔的實例

    

     declare @xml varchar(8000)

     SET @xml=‘

         <>

         Title="jiangsuer" UserID="Admin" Author="湖北"

         SendTime="1/1/2001" Department="mse"

         AttachFile="hust"

         ReceiveList="younther" Body="hustwelcome">

             

          

             

          

 

     exec upArchiveMsgInsertMsg @xml

    

*******************************************************************************/

//這個運行存儲過程先在ArchiveMsg表中插入一條公文信息,并根據(jù)該條公文信息的MsgID和接受者列表,再在MsgList表插入每個接受者的UserID和MsgID,這些信息從xml中獲取。

 

ALTER PROCEDURE upArchiveMsgInsertMsg

     (

         @xml         varchar(8000)

     )

AS

      DECLARE @idoc int      -- xml doc

     DECLARE @MsgID int     -- new order

     DECLARE @SendTime datetime

        -- 解析XML文檔

     EXEC sp_xml_preparedocument @idoc output, @xml

      SET NOCOUNT ON

      DECLARE @CurrentError int

      BEGIN TRANSACTION

        -- 開始更新數(shù)據(jù)的事務(wù)

    

      SELECT @SendTime=SendTime

      FROM OpenXML(@idoc, ‘/ArchiveMsg‘)

      WITH ArchiveMsg

      

INSERT INTO ArchiveMsg(Title,UserID,Author,SendTime,Department,ReceiveList,Body,AttachFile)

      SELECT Title,UserID,Author,SendTime,Department,ReceiveList,Body,AttachFile

      FROM OpenXML(@idoc, ‘/ArchiveMsg‘)

      WITH ArchiveMsg

    

          -- 錯誤檢查

      SELECT @CurrentError = @@Error

    IF @CurrentError != 0

        BEGIN

             GOTO ERROR_HANDLER

        END

           

      SELECT @MsgID=@@IDENTITY

      

      INSERT INTO MsgList(MsgID,UserID,SendTime)

      SELECT @MsgID,UserID,@SendTime

      FROM OpenXML(@idoc, ‘/ArchiveMsg/MsgList‘)

         WITH  (

                 MsgID   int,

                UserID  varchar(80),

                SendTime datetime

         )

   -- 錯誤檢查    

       SELECT @CurrentError = @@Error

 

    IF @CurrentError != 0

        BEGIN

             GOTO ERROR_HANDLER

        END

      

     -- 事務(wù)結(jié)束

      COMMIT TRANSACTION

      SET NOCOUNT OFF

         -- 從內(nèi)存中移除定義的XML文檔

    EXEC sp_xml_removedocument @idoc

 

     RETURN 0

    

      ERROR_HANDLER:

          ROLLBACK TRANSACTION

          SET NOCOUNT OFF   

           -- 從內(nèi)存中移除定義的XML文檔

          EXEC sp_xml_removedocument @idoc

          RETURN  @CurrentError  

*******************************************************************************

好了,存儲過程就是這樣了,我們得測試這個存儲過程,測試函數(shù)代碼如下:

首先我們得生成這個XML文檔,為了簡便起見,我們就用一個String變量來摸擬XML文檔:

         public string GetXmlString(ArchiveDetail myMsg,string[] useridList)

         {

              string xml="";

              xml+="              xml+="Title=\""+myMsg.Title+"\" ";

              xml+="UserID=\""+myMsg.UserID+"\" ";

              xml+="Author=\""+myMsg.Author+"\" ";

              xml+="SendTime=\""+myMsg.SendTime.ToString()+"\" ";

              xml+="Department=\""+myMsg.Department+"\" ";

              xml+="AttachFile=\""+myMsg.AttachFilepath+"\" ";

              xml+="ReceiveList=\""+myMsg.ReceiveList+"\" ";

              xml+="Body=\""+myMsg.Body+"\">";

              foreach(string i in useridList)

              {

                   xml+="";

              }

              xml+="";

              return xml;

         }

然后就是調(diào)用這個存儲過程的函數(shù):

         public bool SendArchiveMsg(ArchiveDetail myMsg,string[] useridList)

         {

              string xml=this.GetXmlString(myMsg,useridList);

              try

              {

                   SqlParameter[] prams={                                           data.MakeInParam("@xml",SqlDbType.VarChar,8000,xml)                              

                            };

SqlConnection con = new

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存查看更多類似文章
猜你喜歡
類似文章
生活服務(wù)
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服