Ê×Ò³ ÐÂÎÅ ÂÛ̳ Ⱥ×é Blog Îĵµ ÏÂÔØ ¶ÁÊé Tag ÍøÕª ËÑË÷ ¿ªÔ´ FAQ µÚ¶þÊéµê ²©ÎÄÊӵ㠳ÌÐòÔ±
ƵµÀ: Ñз¢ Êý¾Ý¿â Öмä¼þ ÐÅÏ¢»¯ ÊÓÆµ .NET Java ÓÎÏ· ÒÆ¶¯ ·þÎñ: È˲ŠÍâ°ü Åàѵ
    Í¼Ê鯷ÖÖ£º235680ÖÖ
       
ÈÈÃÅËÑË÷£º ASP.NET Ajax Spring Hibernate Java

ÔÚǰ¶ËÓ¦ÓóÌÐò·ÃÎÊÉÏ£¬ÓÉÓÚ SQL Server 2005 ÐÂÔöÁËÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍÓë XML Êý¾ÝÀàÐÍ£¬ÎÒÃDZØÐëҪͨ¹ý ADO.NET 2.0 À´Ö§³Öǰ¶ËÓ¦ÓóÌÐò·ÃÎÊÕâÁ½ÖÖÀàÐÍ£¬·ñÔò¾Í¶¼Ö»ÄÜͨ¹ý T-SQL À´²Ù×÷ÕâЩÊý¾ÝÁË¡£

12.7.1  Óû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ

µ±ÎÒÃǽ« .NET ±àдµÄÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ´æÔÚÊý¾Ý¿â×Ö¶ÎÖУ¬Ä¬ÈÏ¿ÉÒÔͨ¹ý ADO.NET ´«µÝ T-SQL Óï·¨µ½ SQL Server 2005£¬ÒÔ²Ù¿ØÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬¶ø²»±Ø½«¸ÃÊý¾ÝÀàÐ͵ÄʵÀýÐòÁл¯ºó£¨serialize£©´«µÝµ½Ç°¶ËÓ¦ÓóÌÐò£¬ÒÔ¼°ÔÚǰ¶ËÓ¦ÓóÌÐò´´½¨»òÐÞ¸ÄÊý¾ÝÀàÐ͵ÄʵÀýºóÔÙ·µ»Ø SQL Server¡£

Ò»°ãÀ´Ëµ£¬ÎÒÃÇ»áÒÔ T-SQL ´îÅä´æ´¢¹ý³Ì»òÓû§×Ô¶¨Ò庯ÊýÀ´Î¬»¤ÕâЩ¼Ç¼¡£¾ÍÒÔ±¾ÊéµÚʮһÕÂËùÓõijÌÐò·¶ÀýΪÀý£¬ÔÚÌí¼Ó¼Ç¼ʱ¿ÉÒÔʹÓÃÏÂÊöµÄÓï·¨£º

DECLARE @s Seat,@s2 desk

SET @s.Size=10

SET @s.Type=N'Ïã½¶ÒÎ' 

SET @s2.Size=20

SET @s2.Type=N'²Í×À' 

INSERT BikeSeats VALUES£¨@s,@s2£©

³ýÁËÌí¼Ó¼Ç¼Í⣬¿ÉÒÔͨ¹ý T-SQL ËùÌṩµÄ×Ö·û´®×ª»»£¬»òÊǵ÷ÓÃ×ÔÐбàдµÄ mutator º¯ÊýÀ´ÐÞ¸ÄÒѾ­´æÔڵļǼ¡£

ÎÒÃÇ¿ÉÒÔרÃÅΪ×Ô¶¨ÒåÊý¾ÝÀàÐÍÀà±àдmutator º¯Êý£¬½áºÏ T-SQL Óï·¨¿É¸üÐÂ×Ô¶¨ÒåÊý¾ÝÀàÐ͵ļǼÄÚÈÝ¡£ÒÔÏÈǰµÄÀàΪÀý£¬ÔÚÆäÖмÓÈëÈç³ÌÐò´úÂëÁбí12-11µÄ mutator º¯Êý¶¨Ò壺

³ÌÐò´úÂëÁбí12-11  ÔÚÀàÖмÓÈë mutator º¯Êý

'Mutator Èà T-SQL ¿ÉÒÔÖ´ÐÐÈçϵÄÓï·¨

' Update tbl Set <UDT ×Ö¶Î>.<Mutator º¯Êý£¨£©> WHERE...

<SqlMethod£¨ismutator:=True, onnullcall:=True£©> _

Public Sub SetDesk£¨ByVal sSize As SqlTypes.SqlInt16, _

ByVal strType As SqlTypes.SqlString£©

    '±ÜÃâÓû§ÔÚ Update ʱÊäÈë NULL£¬ËùÒÔͨ¹ý SqlTypes

    'À´¶¨ÒåÊý¾ÝÀàÐÍ£¬²¢¼ì²é NULL


    If sSize.IsNull Or strType.IsNull Then

        m_size = -1

        m_type = "ÀàÐͲ»Ã÷"

        is_Null = True

    Else

        Me.Size = sSize.Value

        Me.Type = strType.Value

    End If

End Sub

ÎÒÃÇÒÔÒ»°ãµÄº¯Êý±àд·½Ê½ÌṩÀàµÄÊôÐÔÉèÖ㬵«Í¨¹ý SqlMethod ÊôÐÔ£¨Attribute£©ÉèÖà IsMutator Ñ¡ÏîÎªÕæ£¨True£©À´¸æÖª SQL Server ¸Ãº¯ÊýÊÇËùÊô×Ô¶¨ÒåÊý¾ÝÀàÐÍÀàµÄ Mutator º¯Êý¡£Èô×Ô¶¨ÒåÊý¾ÝÀàÐͶ¨ÒåÁËmutator º¯Êý£¬Ôò¸üмǼʱ¿ÉÒÔÈçϵÄÓï·¨Íê³É£¬¶ø²»±ØÒÔ¶à¾äµÄ T-SQL Update Óï·¨À´¸üÐÂ×Ô¶¨ÒåÊý¾ÝÀàÐÍÖеĶà¸öÊôÐÔ£º

--ͨ¹ýmutator º¯Êý¸üÐÂ

UPDATE BikeSeats SET deskInfo.SetDesk£¨40,N'²Í×À'£© WHERE SeatID=2

ͨ¹ý´æ´¢¹ý³Ì¡¢Óû§×Ô¶¨Ò庯ÊýÀ´·ÃÎÊÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍÊÇÒ»¸ö²»´íµÄ·½Ê½£¬ÈÃÕâЩÓû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄʵÀý²»±ØÍ¨¹ýÍøÂç´«µÝµ½Ç°¶ËÓ¦ÓóÌÐò¡£µ«Èô¸Ã¶ÔÏóµÄ²Ù×÷¸´ÔÓ£¬ÎÒÃÇÓÖÏëÒªÖ±½ÓÔÚǰ¶ËÓ¦ÓóÌÐò²Ù×÷ÕâЩÓû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄʵÀý£¬ÔòÐèÒªÔÚ±àд³ÌÐòʱÍê³ÉÈçϵIJ½Ö裺

ÒÔÏÈÁ¬½ÓµÄ£¨early binding£©µÄ·½Ê½ÒýÓÃÕâЩÀඨÒåµÄ³ÌÐò¼¯£¨assembly£©¡£

»òÊÇͨ¹ý .NET Framework ÌṩµÄ reflection »úÖÆ£¬ÒÔºóÆÚÁ¬½Ó£¨late binding£©µÄ·½Ê½ÔÚÖ´ÐÐʱ¶¯Ì¬×°ÔØÀà¡£

ͬʱ£¬ÔÚ»úÆ÷Éϰ²×°Ç°¶ËÓ¦ÓóÌÐòʱ£¬Òª¸½´ø¸ÃÓû§×Ô¶¨ÒåÀàµÄ×é¼þ¡£ÁíÍ⣬¸ÃÀàµÄ°æ±¾ÒªÓë SQL Server ÓÃÀ´Öƶ¨×Ô¶¨ÒåÊý¾ÝÀàÐ͵Ä×é¼þ°æ±¾Ïàͬ¡£¶øÇ°¶ËÓ¦ÓóÌÐòÔÚÖ´ÐÐʱ£¬¸Ã×é¼þÒª²»¾ÍÊÇÓëÓ¦ÓóÌÐòÖ´ÐÐÎļþÔÚͬһ¸öĿ¼Ï£¬Òª²»¾ÍÊǰ²×°ÔÚ GAC£¨Global Assembly Cache£©ÄÚ£¬·ñÔò½«ÎÞ·¨·´ÐòÁл¯ SQL Server ´«À´µÄ×Ô¶¨ÒåÊý¾ÝÀàÐͶÔÏó¸öÌå¡£

SQL Server 2005 »áͨ¹ýÓÉ TDSЭÒ齫×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄʵÀýÒÔÊý¾ÝÁ÷£¨stream£©µÄ·½Ê½´«¸øÇ°¶ËÓ¦ÓóÌÐò¡£ÔÚÏîÄ¿ÖÐÎÒÃÇÏȼÓÈë¶ÔÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍÀàµÄ³ÌÐò¼¯ÒýÓ㬶øºó¾Í¿ÉÒÔ½«È¡»ØµÄ¼Ç¼×Ö¶ÎÇ¿ÖÆ×ª»»£¨casting£©³É×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄÀàʵÀý£¬»òÊǵ÷ÓÃ×ÔÐбàдµÄ·´ÐòÁл¯º¯ÊýÀ´»¹Ô­Êý¾ÝÁ÷Ϊ¶ÔÏóʵÀý¡£

ÎÒÃÇÏÖÔÚ¾ÍÀ´±àдһ¸ö·ÃÎÊÓû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵Äǰ¶ËÓ¦ÓóÌÐò£¬´îÅäµÚʮһÕµķ¶ÀýËùÉè¼ÆµÄ¼òµ¥Ó¦ÓóÌÐò·¶Àý²Ù×÷½çÃæÈçͼ12-12Ëùʾ£º

ͼ12-12  ͨ¹ý ADO.NET 2.0 ά»¤Êý¾Ý±íÄÚÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ×ֶεļǼ

ÔÚÌí¼Ó¼Ç¼ʱ£¬Í¨¹ý SqlCommand ¶ÔÏóʵÀý´îÅä SqlParameter ±äÁ¿£¬Ò»Ñù¿ÉÒÔÖ±½Ó¸³Óè×Ô¶¨ÒåÊý¾ÝÀàÐÍÀàµÄʵÀý¡£Ö´ÐÐ SqlCommand µÄ ExecuteNonQuery ·½·¨£¬¾Í¿ÉÒÔ½«¶ÔÏóʵÀýÐòÁл¯ºóµÄÄÚÈÝ´«»Øµ½ SQL Server ·þÎñÆ÷¶Ë£¬´Ó¶ø¸üÐÂÊý¾Ý£¬·¶Àý³ÌÐò´úÂëÈçÁбí12-12Ëùʾ£º

³ÌÐò´úÂëÁбí12-12  ÒÔÒ»°ãµÄ T-SQL º¯Êý´îÅä SqlCommand ¶ÔÏóÌí¼Ó¼Ç¼

Using cnn As New SqlConnection£¨ _

ConfigurationSettings.ConnectionStrings£¨"AWConnectionString"£©.ConnectionString£©

    Using cmd As New SqlCommand£¨ _

    "INSERT BikeSeats VALUES£¨@SeatInfo,@DeskInfo£©", cnn£©

        cnn.Open£¨£©

        Dim mySeat As New YukonCLR.Seat

        mySeat.Type = cbSeat.Text

        mySeat.Size = txtSeatSize.Text

 

        Dim myDesk As New YukonCLR.Desk

        myDesk.Type = cbDesk.Text

        myDesk.Size = txtDeskSize.Text

 

        With cmd

            ‘Ö¸¶¨²ÎÊýÀàÐÍΪSqlDbType.Udt

            .Parameters.Add£¨New SqlParameter£¨"@SeatInfo", SqlDbType.Udt£©£©

            '±ØÐëÒª¸æÖª UdtType µÄÃû³Æ

            .Parameters£¨0£©.UdtTypeName = "AdventureWorks.dbo.Seat"

            .Parameters£¨0£©.Value = mySeat

            .ExecuteNonQuery£¨£©

ÔÚÉÏÊö³ÌÐò´úÂëÖÐÖµµÃÒ»ÌáµÄÊÇ£ºÓëÒ»°ãµÄ SQL Server Êý¾ÝÀàÐͲ»Í¬µÄÊÇ£¬²»½ö½öÒªÖ¸¶¨²ÎÊýÀàÐÍΪSqlDbType.Udt£¬»¹ÒªÍ¨¹ý SqlCommand ¶ÔÏóʵÀýµÄ UdtTypeName ÊôÐÔ¸æÖª SQL Server 2005 ¸Ã×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄÃû³Æ£¬Èà SQL Server ÕýÈ·µØ´æ·Å½øÊý¾Ý¿â¡£

ÈôҪȡ»Øº¬×Ô¶¨ÒåÊý¾ÝÀàÐ͵ļǼµÄÄÚÈÝ£¬Ò²ÓëÒ»°ãµÄ¼Ç¼ÎÞÒ죬һÑù¿ÉÒÔͨ¹ý SqlDataReader ¶ÔÏóʵÀýÖðÌõ¶ÁÈ¡¼Ç¼£¬²¢½«Í¨¹ýÍøÂç´«À´µÄ×Ô¶¨ÒåÊý¾ÝÀàÐÍʵÀý·´ÐòÁл¯ºó£¬Ç¿ÖÆÖ¸¶¨×ª»»³É¸Ã×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄʵÀý£¬Ö®ºó±ãÒÔ¶ÔÏóʵÀýµÄ·½Ê½²Ù×÷£¬ÀýÈç¶ÁÈ¡ÊôÐÔ»òµ÷Óú¯ÊýµÈµÈ£¬¼òµ¥µÄ·¶Àý³ÌÐòÈçÁбí12-13£º

³ÌÐò´úÂëÁбí12-13  ¶ÁÈ¡Êý¾Ý¼Ç¼ºóÖ±½Óת»»³ÉÓû§×Ô¶¨ÒåÀàÐÍÀàµÄʵÀý

µ¥±Ê¼Ç¼¶ÁÈ¡Óû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵ÄÄÚÈÝ

Using cnn As New SqlConnection£¨ _

ConfigurationSettings.ConnectionStrings£¨"AWConnectionString"£©.ConnectionString£©

    Using cmd As New SqlCommand£¨ _

    "SELECT SeatID ±àºÅ,SeatInfo ÒÎ×Ó,DeskInfo ×À×Ó FROM BikeSeats WHERE SeatID=" & _

    txtID.Text, cnn£©

        cnn.Open£¨£©

        Dim dr As SqlDataReader = cmd.ExecuteReader£¨£©

        Dim myDesk As YukonCLR.Desk

        While dr.Read£¨£©

            If RadioButton1.Checked Then

                '¿ÉÖ±½Óת»»»»³É×Ô¶¨ÒåÀàÐ͵ĶÔÏóʵÀý

                myDesk = CType£¨dr£¨2£©, YukonCLR.Desk£©

            Else

                'ÒòΪÎÒÃÇÏÈǰ±àд Desk Ààʱ£¬ÓÐʵÏÖ¶þ½øÖÆÐòÁл¯µÄ½çÃæ

                'IBinarySerialize£¬Òò´ËÔÚ´ËÒ²¿ÉÒÔ Binary ¶ÁÈ¡Êý¾ÝÄÚÈݺó

                'ÔÙ·´ÐòÁл¯»Ø Desk ʵÀý£¬´ËÖÖ·½Ê½µÄÐÔÄÜ»áÉÔÉÔºÃЩ

                Dim aryByte£¨1000£© As Byte


                Dim iBytes As Integer = dr.GetBytes£¨2, 0, aryByte, 0, 1000£©

                Dim memStream As New MemoryStream£¨aryByte£©

                myDesk = New YukonCLR.Desk

                myDesk.read£¨New BinaryReader£¨memStream£©£©

            End If

 

            strRes += "´óС£º " & myDesk.Size & vbCrLf

            strRes += "ÀàÐÍ£º " & myDesk.Type & vbCrLf

            strRes += "¼Û¸ñ£º " & myDesk.GetPrice£¨£©.ToString£¨£© & vbCrLf

        End While

        If strRes = "" Then MessageBox.Show£¨"ûÓзûºÏ²éѯµÄ¼Ç¼"£© Else _

        MessageBox.Show£¨strRes, "Ìâ×¢ " & txtID.Text & " µÄ×À×Ó×Ö¶ÎʵÀý"£©

ÔÚÉÏÊö·¶ÀýÖУ¬ÎÒÃÇ¿ÉÒÔÖ±½Ó½« DataReader ÄڵļǼ×Ö¶Îͨ¹ý VB.NET ÌṩµÄ CType º¯Êýת»»³ÉÓû§×Ô¶¨ÒåÀàÐÍÀà YukonCLR.Desk µÄʵÀý¡£»òͨ¹ýÓÉÎÒÃÇÔÚ¸ÃÀàʵÏÖIBinarySerialize½Ó¿ÚµÄ Read ·½·¨£¬¶ÁÈ¡SQL Server ´«À´µÄÐòÁл¯Êý¾Ý£¬²¢»¹Ô­»ØÊµÀý¡£²»¹ÜÊDzÉÓÃÄÄÒ»ÖÖ·½Ê½£¬Ëæºó¶¼¿ÉÒÔÒ»°ã²Ù×÷¶ÔÏóʵÀýµÄ·½Ê½·ÃÎÊÀàµÄÊôÐÔ¡¢·½·¨¡£

µ«Èô½öÏëÖ±½Ó½«¶Á»ØµÄ¼Ç¼¸³Óèµ½ DataGridView ¿ØÖÆÏÒÔÊý¾Ý°ó¶¨£¨DataBinding£©µÄ·½Ê½ÏÔʾ£¬²¢²»ÐèÒª²Ù×÷¶ÔÏóµÄÊôÐÔ»ò·½·¨£¬Ôò³ÌÐò´úÂëÓëÒ»°ãÆäËüµÄÊý¾ÝÀàÐÍ·ÃÎÊÒ»ÑùÖ±¹Û£¬Æä·¶ÀýÈç³ÌÐò´úÂëÁбí12-14Ëùʾ£º

³ÌÐò´úÂëÁбí12-14  ͨ¹ý DataGridView ¿ØÖÆÏîÖ±½ÓÏÔʾ°üº¬Óû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵IJéѯ½á¹û

Using cmd As New SqlCommand£¨ _

"SELECT SeatID ±àºÅ,SeatInfo ÒÎ×Ó,DeskInfo ×À×Ó FROM BikeSeats", cnn£©

    cnn.Open£¨£©

    Dim dr As SqlDataReader = cmd.ExecuteReader£¨£©

 

    Dim dt As New DataTable

    '×°ÔØÊý¾Ý

    dt.Load£¨dr£©

 

    'ÌæÊý¾Ý±í¶¨ÒåÖ÷¼ü£¨Primary Key£©Ô¼Êø

    dt.Constraints.Add£¨New System.Data.UniqueConstraint£¨"Pk", _

    New System.Data.DataColumn£¨£© {dt.Columns£¨0£©}, True£©£©

 

    'DataGridView Ö±½Óµ÷Óà UDT ×Ô¼ºµÄ ToString À´ÏÔʾÄÚÈÝ£¬µ«

    'Ð޸ĺ󲻻á×Ô¶¯×ª³É UDT µÄ Object ʵÀý£¬ÈôÖ±½ÓÐ޸ĻáÓдíÎó

    DataGridView1.ReadOnly = True

    DataGridView1.DataSource = dt

½«³ÌÐò´úÂëÁбí12-14 µÄÄÚÈÝÓëÉÏͼ12-12 ÖмäÏÔʾÏÖµÄ DataGridView ½á¹û¶Ô±È£¬Äã¿ÉÒÔ·¢ÏÖÈô½öÊÇͨ¹ý DataGridView ¿ØÖÆÏîÀ´ÏÔʾº¬ÓÐÓû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵ļǼÓëÒ»°ãµÄ¼Ç¼£¬ËüÃDz¢ÎÞ²»Í¬¡£

¶ø¸üÐÂÊý¾ÝµÄ·½Ê½ÓëÏÈǰ³ÌÐò´úÂëÁбí12-12 Ëù±àдµÄÌí¼Ó¼Ç¼ÀàËÆ£¬²»¹ýÔÚÕâÀïÎÒÃÇÖ±½Óµ÷ÓÃÏÈǰÔÚÀàÖÐ×ÔÐбàдµÄ Parse ·½·¨£¬Ö±½Ó½«×Ö·û´®×ª»»³É Seat »ò Desk ÀàʵÀý·µ»Ø£¬¸³Óèµ½ SqlParameter ¶ÔÏóʵÀýµÄ Value ºó¸üмͼÄÚÈÝ£¬Èç³ÌÐò´úÂëÁбí12-15¶ø²»Ïñ³ÌÐò´úÂëÁбí12-12 ÖÐÏÈ´´½¨ Seat »ò Desk ÀàʵÀýºó£¬·Ö±ð¸³Óè¸÷ÊôÐÔÖµÔÙ½«ÊµÀýÉèÖõ½ SqlParameter£º

³ÌÐò´úÂëÁбí12-15  ÒÔÒ»°ãµÄ T-SQL º¯Êý´îÅä SqlCommand ¶ÔÏó¸üмͼ

Using cmd As New SqlCommand£¨ _

"UPDATE BikeSeats SET SeatInfo= @SeatInfo,DeskInfo=@DeskInfo WHERE SeatID=@ID", cnn£©

    cnn.Open£¨£©

 

    With cmd

        .Parameters.Add£¨New SqlParameter£¨"@SeatInfo", SqlDbType.Udt£©£©

        '±ØÐëÒª¸æÖª UdtType µÄÃû³Æ

        .Parameters£¨0£©.UdtTypeName = "AdventureWorks.dbo.Seat"

        If txtUpdateSeat.Text = "" Then

            .Parameters£¨0£©.Value = DBNull.Value

        Else

            'ͨ¹ýÎÒÃÇÔÚ Seat Ëùʵ×öµÄ shared Parse ·½·¨Ö±½Ó½«ÎÄ×Öת³É

            'Seat ÀàµÄʵÀý

            .Parameters£¨0£©.Value = YukonCLR.Seat.Parse£¨txtUpdateSeat.Text£©

        End If

            intRows = .ExecuteNonQuery£¨£©

ÈôÄãÊÇͨ¹ýÒÔÍùµÄ³ÌÐò½çÃæ·ÃÎÊ SQL Server 2005£¬Ôò ODBC ½öÄÜÒÔ×é T-SQL ×Ö·û´®µÄ·½Ê½À´²Ù×÷Óû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬¶ø OLE DB/ADO Ôò¿ÉÒÔ½« .NET ±àдµÄÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍÊä³öÒ»·Ý COM ÊÀ½çµÄ Type Library ºó£¬ÔÚ³ÌÐòÄÚÒýÓã¨ÈçÔÚ VB6 µÄ±à¼­»·¾³ÉèÖÃÒýÓã©£¬Ö®ºó³ÌÐò±àдµÄ·½Ê½ÓëÉÏÊö ADO.NET ÀàËÆ¡£

12.7.2  Í¨¹ýADO.NET 2.0·ÃÎÊXMLÊý¾ÝÀàÐÍ

Èçͬ±¾½ÚǰÊöͨ¹ý ADO.NET 2.0 ·ÃÎÊÓû§×Ô¶¨ÒåÊý¾ÝÀàÐÍ£¬Äã¿ÉÒÔÀûÓÃ×éÖ¯ T-SQL µÄ·½Ê½À´Î¬»¤Êý¾Ý±íÄÚµÄ XML Êý¾Ý£¬Ò²¿ÉÒÔÓô洢¹ý³Ì»òÓû§×Ô¶¨Ò庯ÊýÔÚ SQL Server ·þÎñÆ÷¶ËÍê³É XML Êý¾Ý·ÃÎÊ£¬µ«Ò²¿ÉÒÔÓà ADO.NET 2.0 Ïà¹ØµÄÀàÀ´Î¬»¤ÆäÄÚÈÝ¡£

ADO.NET 2.0 µÄ System.Data.SqlTypes.SqlTypes ÐÂÔö ÁËSqlXML À࣬ÆäʵÀýËùÌṩµÄ CreateReader ·½·¨¿ÉÒÔ½«×Ö¶ÎÄÚÈÝÖ±½Óת»»³É System.Xml.XmlReader ÀàµÄʵÀýÀ´¶ÁÈ¡ XML Êý¾ÝÄÚÈÝ¡£ÎÒÃDZàд¼òµ¥µÄ XML Êý¾Ý·ÃÎÊ·¶Àý»­ÃæÈçͼ12-13 Ëùʾ£º

ͼ12-13  ͨ¹ý ADO.NET 2.0 Ö±½Óά»¤Êý¾Ý±íÄÚ XML Êý¾ÝÄÚÈÝ

ͨ¹ýÒ»°ãµÄ SqlDataReader ÀàʵÀýÈ¡»ØÏà¹ØµÄ³ÌÐò´úÂë·¶ÀýÈçÁбí12-16£º

³ÌÐò´úÂëÁбí12-16  ͨ¹ý SqlDataReader ʵÀýÌṩµÄ GetSqlXml ·½·¨½«×Ö¶ÎÄÚÈÝÒÔ SqlXml ÀàʵÀý·µ»Ø£¬¶øºóÔÙÒÔ¸ÃÀàµÄ CreateReader ·½·¨½¨Á¢ XmlReader ¶ÔÏóʵÀý

Using cmd As New SqlCommand£¨"SELECT c1,c2 FROM tblXML", cnn£©

    Dim r As SqlDataReader = cmd.ExecuteReader£¨£©

 

    While r.Read

        TextBox1.Text &= "±àºÅ " & r£¨0£©.ToString£¨£© & " µÄÖµ£º " & r.GetString£¨1£© & vbCrLf

 

        Dim doc As SqlXml = r.GetSqlXml£¨1£©

        Dim xmlr As XmlReader = doc.CreateReader

        While £¨xmlr.Read£©

            TextBox1.Text &= "ÀàÐÍ/Ãû³Æ/Öµ£º" & xmlr.NodeType.ToString & "/" & _

            xmlr.Name & "/" & xmlr.Value & vbCrLf

        End While

ÔÚÉÏÊö³ÌÐò´úÂëÖпÉÒÔ¿´µ½Í¨¹ý SqlDataReader ʵÀýµÄ GetSqlXml ·½·¨¿ÉÒÔ½«µ¥Ìõ¼Ç¼ÄÚµÄ XML ×Ö¶ÎÊý¾ÝÖ±½Óת»»³É SqlXml ÀàʵÀý£¬¶øºóÔÙͨ¹ý SqlXml ʵÀýµÄ CreateReader ·½·¨½« XML Êý¾ÝÔÙ¸³Óè³É XmlReader À´Öð½Úµã¶ÁÈ¡¡£Äã¿ÉÒÔ½«Í¼12-13 ×îÉÏ·½Í¨¹ý DataGridView ¿ØÖÆÏîÏÔʾµÄÿÌõ¼Ç¼ÄÚ µÄXML Êý¾ÝÄÚÈÝÓëÖмäÎı¾¿òµÄÄÚÈÝÉÔ×ö¶Ô±È£¬¾ÍÄÜ¿´³ö³ÌÐò´úÂëÁбí12-16 ÈçºÎ½âÎö XML ¼Ç¼ÄÚÈݳÉΪͼÖÐÎı¾¿òµÄ½á¹û¡£

ÖÁÓÚͨ¹ý DataGridView ÏÔʾ XML ×Ö¶ÎÄÚÈÝ£¬Óë³ÌÐò´úÂëÁбí12-14 ÓÃÀ´ÏÔʾÓû§×Ô¶¨ÒåÊý¾ÝÀàÐ͵ķ½Ê½Ïàͬ£¬ÔÚ´ËÒ²¾Í²»Öظ´Áгö³ÌÐò´úÂëÄÚÈÝ¡£¶øÐÂÔö XMLÀàÐÍÊý¾Ýµ½Êý¾Ý±í×ֶεķ½Ê½ÓëÒ»°ãµÄÆäËûÀàÐÍÎÞÒ죬Äã¿ÉÒÔÔ¼ÂÔ±ÈÕÕ×Ö·û´®´¦ÀíµÄ·½Ê½ÉèÖ㬷¶Àý³ÌÐò´úÂëÈçÏ£º

³ÌÐò´úÂëÁбí12-17  Ö±½Ó¸³Óè²ÎÊýÄÚÈÝ XML ×Ö·û´®Êý¾Ý»òÊÇ SqlXml ¶ÔÏóʵÀýÀ´ÉèÖÃXmlÊý¾Ý×Ö¶ÎÄÚÈÝ

Using cnn As New SqlConnection£¨"Data Source=.;Initial Catalog=AdventureWorks;Integrated Security=SSPI"£©

    cnn.Open£¨£©

    Using cmd As New SqlCommand£¨"INSERT tblXML VALUES£¨@c2£©", cnn£©

        With cmd

            .Parameters.Add£¨New SqlParameter£¨"@c2", SqlDbType.Xml£©£©

            If RadioButton1.Checked Then

                .Parameters£¨0£©.Value = txtInsertXML.Text


            Else

                '´ÓÎļþÖ±½Ó¶ÁÈ¡ XML µÄÄÚÈÝºó´æ·Åµ½Êý¾Ý±íµÄ XML ¼Ç¼×Ö¶ÎÖÐ

                If Not File.Exists£¨txtInsertXML.Text£© Then

                    MessageBox.Show£¨txtInsertXML.Text & " Îļþ²»´æÔÚ", "ÎÞ·¨´ÓÎļþ¶ÁÈ¡ XML"£©

                    Return

                End If

 

                Dim xtr As New XmlTextReader£¨txtInsertXML.Text£©

                .Parameters£¨0£©.Value = New SqlXml£¨xtr£©

            End If

            .ExecuteNonQuery£¨£©

ÔÚÉÏÊö³ÌÐò´úÂë·¶ÀýÖбȽÏÓÐȤµÄµØ·½ÊÇͨ¹ý XmlTextReader ÀàÖ±½Ó¶ÁÈ¡´æ·ÅÔÚÎļþϵͳÉ쵀 XML Êý¾ÝÎļþ£¬È»ºó¸³Óèµ½ SqlXml ¶ÔÏóʵÀýµÄ¹¹Ô캯Êý£¬±ã¿ÉÒÔÐÂÔöµ½Êý¾Ý¿âÄÚ¡£Õâ»òÐí¿ÉÒÔÈÃÄ㽫´æ·ÅÔÚÎļþϵͳÉ쵀 XML Êý¾Ý·½±ãµØ·ÅÈëÊý¾Ý±íÄÚ¡£µ±È»£¬»¹ÓÐÁíÒ»¸öÑ¡ÔñÊÇͨ¹ý T-SQL OpenRowset º¯ÊýÐÂÔöµÄ Bulk Provider À´´æ·Å XML£¬Ïà¹ØÄÚÈÝÇë²ÎÔı¾ÊéµÚÎåÕ¡£

¡¾²é¿´ËùÓÐÆÀÂÛ(0)Ìõ¡¿

×î½üÆÀÂÛ



ÕýÔÚÔØÈëÆÀÂÛÁбí...
ÈȵãÆÀÂÛ