ÔÚǰ¶ËÓ¦ÓóÌÐò·ÃÎÊÉÏ£¬ÓÉÓÚ 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£¬Ïà¹ØÄÚÈÝÇë²ÎÔı¾ÊéµÚÎåÕ¡£





