[µ¼¶Á]ʵÏÖÊý¾Ý·ÃÎʹ¦ÄÜÊÇ´ó¶àÊýʹÓÃ.net FrameworkµÄ¿ª·¢ÈËÔ±µÄºËÐŤ×÷£¬²¢ÇÒÓÉËûÃÇÉú³ÉµÄÊý¾Ý·ÃÎʲãÊÇÆäÓ¦ÓóÌÐò±Ø²»¿ÉÉÙµÄ×é³É²¿·Ö¡£±¾ÎĸÅÊöÁËÎå¸ö½¨Ò飬ϣÍûÄúÔÚʹÓÃVisual
Studio .NETºÍ.NET FrameworkÉú³ÉÊý¾Ý·ÃÎʲãʱÓèÒÔ¿¼ÂÇ¡£ÕâЩ¼¼ÇɰüÀ¨Í¨¹ýʹÓûùÀàÀ´ÀûÓÃÃæÏò¶ÔÏóµÄ¼¼ÊõºÍ.NET
Framework»ù´¡½á¹¹£¬Í¨¹ý×ñÑijЩ׼ÔòʹÀà±äµÃÒ×Óڼ̳У¬ÒÔ¼°Ôھͱíʾ·½·¨ºÍÍⲿ½Ó¿Ú½øÐоö²ß֮ǰ×Ðϸ·ÖÎö×Ô¼ºµÄÐèÒª¡£
Èç¹ûÄúÒªÕë¶ÔMicrosoft .NET FrameworkÀ´¿ª·¢ÒÔÊý¾ÝΪÖÐÐĵÄÓ¦ÓóÌÐò£¬ÄÇôÄúÖÕ½«ÐèÒª´´½¨Êý¾Ý·ÃÎʲ㣨DAL£©¡£Äú¿ÉÄÜÖªµÀÔÚ.NET
FrameworkÖÐÉú³É´úÂë´øÀ´µÄһЩºÃ´¦¡£ÒòΪËüͬʱ֧³ÖʵÏֺͽӿڼ̳У¬ËùÒÔÄúµÄ´úÂë¿ÉÒÔ¾ßÓиü¸ßµÄ¿ÉÖØÓÃÐÔ£¬ÓÈÆäÊǿɹ©ÄúµÄ×éÖ¯ÖÐÄÇЩʹÓÃÓëFramework¼æÈÝµÄÆäËû±à³ÌÓïÑԵĿª·¢ÈËÔ±ÖØÓá£ÔÚ±¾ÎÄÖУ¬ÎÒ½«½éÉÜΪÁËÕë¶Ô»ùÓÚ.NET
FrameworkµÄÓ¦ÓóÌÐò¶ø¿ª·¢DALµÄÎå¸ö¹æÔò¡£ÔÚ¿ªÊ¼Ö®Ç°£¬ÎÒҪ˵Ã÷µÄÊÇ£¬»ùÓÚ±¾ÎÄÖÐÌÖÂ۵ĹæÔòÉú³ÉµÄÈκÎDAL¶¼½«ÓëWindowsƽ̨ÉϵĿª·¢ÈËÔ±Ëùϲ°®µÄ´«Í³µÄ¶à²ã»òN²ãÓ¦ÓóÌÐò¼æÈÝ¡£ÔÚ¸ÃÌåϵ½á¹¹ÖУ¬±íʾ²ãÓɶÔе÷Êý¾Ý·ÃÎʲ㹤×÷µÄÒµÎñ²ã½øÐе÷ÓõÄWeb´°Ìå¡¢Windows´°Ìå»òXML
Web Service´úÂë×é³É¡£¸Ã²ã°üº¬¶à¸öÊý¾Ý·ÃÎÊÀà¡£ÁíÍ⣬ÔÚ²»ÐèÒª½øÐÐÒµÎñ´¦Àíе÷µÄÇé¿öÏ£¬±íʾ²ã¿ÉÄÜ»áÖ±½Ó¶ÔDAL½øÐе÷Ó᣸ÃÌåϵ½á¹¹ÊÇ´«Í³µÄÄ£ÐÍ-ÊÓͼ-¿ØÖÆÆ÷£¨MVC£©Ä£Ê½µÄ±äÌ壬²¢ÇÒÔÚÐí¶à·½ÃæÓÉVisual
Studio.NET¼°Æä¹«¿ªµÄ¿Ø¼þËù²ÉÓá£
¹æÔò1£ºÊ¹ÓÃÃæÏò¶ÔÏóµÄ¹¦ÄÜ
×î»ù´¡µÄÃæÏò¶ÔÏóµÄÈÎÎñÊÇʹÓü̳еÄʵÏÖÀ´´´½¨³éÏó»ùÀ࣬¸Ã»ùÀà¿ÉÒÔ°üº¬ËùÓÐÊý¾Ý·ÃÎÊÀà¿ÉÒÔͨ¹ý¼Ì³ÐʹÓõķþÎñ¡£Èç¹ûÕâЩ·þÎñ×㹻ͨÓã¬Ôò¿ÉÒÔͨ¹ýÔÚÕû¸ö×éÖ¯Öзַ¢»ùÀàÀ´¶ÔËüÃǽøÐÐÖØÓá£ÀýÈ磬ÔÚ×î¼òµ¥µÄÇé¿öÏ£¬»ùÀà¿ÉÒÔΪÅÉÉúÀàÍê³ÉÁ¬½Ó¶ÔÏóµÄ´´½¨£¬Èçͼ1Ëùʾ¡£
Imports System.Data.SqlClient
Namespace ACME.Data
Public MustInherit Class DALBase : Implements IDisposable
¡¡Private _connection As SqlConnection
¡¡Protected Sub New(ByVal connect As String)
¡¡¡¡_connection = New SqlConnection(connect)
¡¡End Sub
¡¡Protected ReadOnly Property Connection() As SqlConnection
¡¡Get
¡¡¡¡Return _connection
¡¡End Get
End Property
Public Sub Dispose() Implements IDisposable.Dispose
¡¡_connection.Dispose()
End Sub
End Class
End Namespace
|
ͼ1 ¼òµ¥µÄ»ùÀà
ÕýÈçÄúÔÚ¸ÃͼÖп´µ½µÄÄÇÑù£¬DALBaseÀà±»±ê¼ÇΪMustInherit£¨ÔÚC#ÖÐΪabstract£©£¬ÒÔÈ·±£ËüÓÃÓڼ̳йØÏµ¡£¸ÃÀàËæºó»á°üº¬Ò»¸öÔÚ¹«¹²¹¹Ô캯Êý£¨Ëü½ÓÊÜÁ¬½Ó×Ö·û´®×÷Ϊ²ÎÊý£©ÖÐʵÀý»¯µÄ˽ÓÐSqlConnection¶ÔÏó¡£È»ºó£¬Êܱ£»¤µÄConnectionÊôÐÔÔÊÐíÅÉÉúÀà·ÃÎʸÃÁ¬½Ó¶ÔÏ󣬶øIDisposable½Ó¿ÚÖеÄDispose·½·¨ÔòÈ·±£¸ÃÁ¬½Ó¶ÔÏóµÃÒÔ±»´¦Àí¡£¼´Ê¹ÊÇÔÚÏÂÃæÕâ¸ö¼ò»¯µÄʾÀýÖУ¬ÄúÒ²¿ÉÒÔ´ÓÖÐ×¢Òâµ½³éÏó»ùÀàµÄÓô¦£º
Public Class WebData : Inherits DALBase
Public Sub New()
¡¡MyBase.New(ConfigurationSettings.AppSettings("ConnectString"))
End Sub
Public Function GetOrders() As DataSet
¡¡Dim da As New SqlDataAdapter("usp_GetOrders", Me.Connection)
¡¡da.SelectCommand.CommandType = CommandType.StoredProcedure
¡¡Dim ds As New DataSet()
¡¡da.Fill(ds)
¡¡Return ds
End Function
End Class
|
ÔÚ¸ÃʾÀýÖУ¬WebDataÀà¼Ì³Ð×ÔDALBase£¬Òò´ËËü²»ÐèÒª¿¼ÂÇʵÀý»¯SqlConnection¶ÔÏóµÄÎÊÌ⣬¶øÖ»Ðèͨ¹ýMyBase¹Ø¼ü×Ö£¨»òC#ÖеÄbase¹Ø¼ü×Ö£©½«Á¬½Ó×Ö·û´®´«µÝ¸ø»ùÀà¡£WebDataÀàµÄGetOrders·½·¨¿ÉÒÔʹÓÃMe.Connection£¨ÔÚC#ÖÐΪthis.Connection£©·ÃÎÊÊܱ£»¤µÄÊôÐÔ¡£¾¡¹Ü¸ÃʾÀýÏà¶Ô¼òµ¥£¬µ«Èç¹ûÄú¿´Á˹æÔò2ºÍ¹æÔò3µÄ»°£¬¾Í»á·¢ÏָûùÀ໹¿ÉÒÔÌṩÆäËû·þÎñ¡£
µ±DALÐèÒªÔÚCOM+»·¾³ÖÐÔËÐÐʱ£¬³éÏó»ùÀàÓÈÆäÓÐÓá£ÔÚÕâÖÖÇé¿öÏ£¬ÒòΪÔÊÐí×é¼þʹÓÃCOM+ËùÐèµÄ´úÂë¸üΪ¸´ÔÓ£¬ËùÒÔ´´½¨Ò»¸öÈçͼ2ÖÐËùʾµÄ·þÎñ×é¼þ»ùÀàÊÇÓÐÒâÒåµÄ¡£
£¼ConstructionEnabled(True), _
Transaction(TransactionOption.Supported), _
EventTrackingEnabled(True)£¾ _
Public MustInherit Class DALServicedBase : Inherits ServicedComponent
Private _connection As SqlConnection
¡¡Protected Overrides Sub Construct(ByVal s As String)
¡¡¡¡_connection = New SqlConnection(s)
¡¡End Sub
¡¡Protected ReadOnly Property Connection() As SqlConnection
¡¡Get
¡¡¡¡Return _connection
¡¡End Get
End Property
End Class
|
ͼ2 ·þÎñ×é¼þ»ùÀà
ÔڸôúÂëÖУ¬DALServicedBaseÀà»ù±¾Éϰüº¬ÁËÓëͼ1ÖÐÏàͬµÄ¹¦ÄÜ£¬µ«ÊÇËüÁíÍâ¼Ì³ÐÁËSystem.EntERPriseServicesÃüÃû¿Õ¼äÖеÄServicedComponent£¬²¢ÇÒ°üº¬ÁËһЩÊôÐÔÒÔÖ¸Ã÷¸Ã×é¼þÖ§³Ö¶ÔÏó½á¹¹¡¢ÊÂÎñºÍͳ¼ÆÐÅÏ¢¸ú×Ù¡£È»ºó£¬¸Ã»ùÀฺÔð²¶×½ÔÚ×é¼þ·þÎñ¹ÜÀíÆ÷ÖÐÅäÖõĽṹ×Ö·û´®£¬²¢ÔÙÒ»´Î´´½¨ºÍ¹«¿ªSqlConnection¶ÔÏó¡£ÐèҪעÒâµÄÊÇ£¬µ±Ò»¸öÀà´ÓDALServicedBase¼Ì³Ðʱ£¬Ëü»¹½«¼Ì³ÐÊôÐÔµÄÉèÖ᣻»¾ä»°Ëµ£¬ÅÉÉúÀàÒ²»á½«ËüµÄÊÂÎñÑ¡ÏîÉèÖÃΪSupported¡£Èç¹û¸ÃÅÉÉúÀàÏëÒªÖØÐ´¸ÃÐÐΪ£¬ÔòËü¿ÉÒÔÔÚÀ༶±ðÖØÐ¶¨Òå¸ÃÊôÐÔ¡£´ËÍ⣬ÅÉÉúÀ໹Ӧ¸ÃÔÚÊʵ±Î»ÖöÔ×ÔÉíÀûÓÃÖØÔØ·½·¨ºÍ¹²Ïí·½·¨¡£Ö÷ÒªÓÐÁ½ÖÖʹÓÃÖØÔØ·½·¨£¨¾ßÓжà¸öÇ©ÃûµÄµ¥¸ö·½·¨£©µÄÇé¿ö¡£µÚÒ»£¬µ±·½·¨ÐèÒª½ÓÊոıäÆäÀàÐ͵IJÎÊýʱ£¬¿ÉÒÔʹÓÃËüÃÇ¡£ÔÚFrameworkÖУ¬ÕâÒ»ÀàÐ͵ĵäÐÍʾÀýÊÇSystem.ConvertÀàµÄ·½·¨¡£ÀýÈ磬ToString·½·¨°üÀ¨18¸ö½ÓÊÕÒ»¸ö²ÎÊýµÄÖØÔØ·½·¨£¬Ã¿¸ö·½·¨¶¼¾ßÓв»Í¬µÄÀàÐÍ¡£µÚ¶þ£¬ÖØÔØ·½·¨¿ÉÒÔÓÃÀ´¹«¿ª²ÎÊýÊýÁ¿²»¶ÏÔö¼Ó£¨µ«²»Ò»¶¨ÊDz»Í¬ÀàÐ͵IJÎÊý£©µÄÇ©Ãû¡£ÕâÖÖÀàÐ͵ÄÖØÔØÖ¤Ã÷ÔÚDALÖзdz£ÓÐЧ£¬ÒòΪ¿ÉÒÔʹÓÃËüÀ´¹«¿ªÓÃÓÚÊý¾Ý¼ìË÷ºÍÐ޸ĵı¸ÓÃÇ©Ãû¡£ÀýÈ磬¿ÉÒÔÖØÔØGetOrders·½·¨ÒÔ±ãÒ»¸öÇ©Ãû²»½ÓÊÕÈκβÎÊý²¢·µ»ØËùÓж©µ¥£¬¶øÁíÒ»¸öÇ©ÃûÔò½ÓÊÕÒ»¸ö±íÃ÷µ÷Ó÷½Ö»´òËã¼ìË÷ÌØ¶¨¿Í»§¶©µ¥µÄ²ÎÊý£¬ÈçÏÂÃæµÄ´úÂëËùʾ£º
Public Overloads Function GetOrders() As DataSet
Public Overloads Function GetOrders(ByVal customerId As Integer) As DataSet
|
ÔÚÕâÖÖÇé¿öÏ£¬Á¼ºÃµÄʵÏÖ¼¼ÇÉÊǽ«GetOrders·½·¨µÄ¹¦ÄܳéÏóµ½Ò»¸ö¿ÉÒÔÓÉÿ¸öÖØÔØÇ©Ãûµ÷ÓõÄ˽ÓлòÊܱ£»¤µÄ·½·¨ÖС£»¹¿ÉÒÔʹÓù²Ïí·½·¨£¨ÔÚC#ÖÐΪstatic·½·¨£©À´Õ¹¿ª¿É¹©Êý¾Ý·ÃÎÊÀàµÄËùÓÐʵÀý·ÃÎʵÄ×ֶΡ¢ÊôÐԺͷ½·¨¡£¾¡¹Ü²»Äܽ«¹²Ïí³ÉÔ±ÓëʹÓÃ×é¼þ·þÎñµÄÀà½áºÏʹÓ㬵«ÊǶÔÓÚ¿ÉÒÔÔÚÊý¾Ý·ÃÎÊÀàµÄ¹²Ïí¹¹Ô캯ÊýÖмìË÷È»ºó±»ËùÓÐʵÀý¶ÁÈ¡µÄÖ»¶ÁÊý¾ÝÀ´Ëµ£¬ËüÃÇ¿ÉÄÜÊ®·ÖÓÐÓá£ÔÚ¶Ô¶Á/дÊý¾ÝʹÓù²Ïí³ÉÔ±Ê±ÒªÌØ±ðСÐÄ£¬ÕâÊÇÒòΪ¶à¸öÖ´ÐÐÏ߳̿ÉÄܻᾺÕùʹÓöԹ²ÏíÊý¾ÝµÄ·ÃÎÊȨ¡£
¹æÔò2£º×ñÊØÉè¼Æ×¼Ôò
ÔÚVisual Studio .netËæ¸½µÄÁª»úÎĵµÖУ¬ÓÐÒ»¸ö±êÌâΪ¡°Design
Guidelines for Class Library Developers¡±µÄÖ÷Ì⣬Ëü²»½öÂÛÊöÄúÓ¦¸Ã×ñѵÄÖØÔØ³ÉÔ±¡¢¹¹Ô캯ÊýºÍʼþµÄģʽ£¬¶øÇÒ»¹ÌÖÂÛÁËÀà¡¢ÊôÐԺͷ½·¨µÄÃüÃûÔ¼¶¨¡£ÄúÓ¦¸Ã×ñÊØÃüÃûÔ¼¶¨µÄÖ÷ÒªÔÒòÖ®Ò»ÊÇ.NET
FrameworkÌṩµÄ½»²æÓïÑԼ̳С£Èç¹ûÄúÒªÔÚVisual Basic .NETÖÐÉú³ÉÒ»¸öDAL»ùÀ࣬ÔòÄúÐèҪȷ±£ÄÇЩʹÓÃÓë.NET
Framework¼æÈÝµÄÆäËûÓïÑԵĿª·¢ÈËÔ±¿ÉÒÔ´ÓËü¼Ì³Ð£¬²¢ÄÜÈÝÒ×µØÀí½âËüµÄ¹¤×÷·½Ê½¡£°´ÕÕÎÒ¸ÅÊö¹ýµÄ×¼ÔòÈ¥×ö£¬ÄÇôÄúµÄÃüÃûÔ¼¶¨ºÍ½á¹¹½«²»»áÊÇÌØ¶¨ÓÚÓïÑÔµÄÁË¡£¾Ù¸öÀý×Ó£¬Äú»áÔÚ±¾ÎĵĴúÂëʾÀýÖÐ×¢Òâµ½£¬Camel´óСд·ç¸ñ£¨Ê׸öµ¥´ÊСд£¬²¢¼ÐÔÓ´óд×Öĸ£©ÓÃÓÚ·½·¨µÄ²ÎÊý£¬Pascal´óСд·ç¸ñ£¨Ã¿¸öµ¥´Ê¶¼´óд£©ÓÃÓÚ·½·¨£¬¶ø»ùÀàÔò¾ßÓÐBaseºó׺ÒÔ±íʾËüÊÇÒ»¸ö³éÏóÀà¡£.NET
FrameworkÉè¼Æ×¼ÔòµÄ±ØÈ»½á¹ûÊdz£¹æÉè¼ÆÄ£Ê½£¬¾ÍÏñGang of Four׫дµÄDesign Patterns£¨Addison-Wesley£¬
1995£©ÖÐËù½éÉܵÄÄÇЩÉè¼ÆÄ£Ê½Ò»Ñù¡£ÀýÈ磬.NET FrameworkʹÓÃÁËObserverģʽµÄÒ»¸öÃûΪEventģʽµÄ±äÌ壨ÄúÔÚÀàÖй«¿ªÊ¼þʱӦµ±×ñѸÃģʽ£©¡£
¹æÔò3£ºÀûÓûù´¡½á¹¹
.NET Framework°üº¬Ò»Ð©¿ÉÒÔ°ïÖú´¦ÀíÓë»ù´¡½á¹¹Ïà¹ØµÄÒ»°ãÐÔÈÎÎñ£¨ÀýÈ磬¼ì²âºÍÒì³£´¦Àí£©µÄÀàºÍ½á¹¹£¬Í¨¹ý»ùÀཫÕâЩ¸ÅÄîÓë¼Ì³ÐÏà½áºÏ¿ÉÄÜÊ®·ÖÓÐÓá£ÀýÈ磬Ç뿼ÂÇÔÚSystem.DiagnosticsÃüÃû¿Õ¼äÖй«¿ªµÄ¸ú×Ù¹¦ÄÜ¡£³ýÁËTraceºÍDebugÀ࣬¸ÃÃüÃû¿Õ¼ä»¹°üÀ¨´ÓSwitchºÍTraceListenerÅÉÉúµÄÀà¡£SwitchÀࡪBooleanSwitchºÍTraceSwitch£¬¿ÉÒÔͨ¹ý±à³Ì·½Ê½ÒÔ¼°Í¨¹ýÓ¦ÓóÌÐòµÄÅäÖÃÎļþ¶ø±»ÅäÖÃΪ´ò¿ªºÍ¹Ø±Õ¡£¾ÍTraceSwitch¶øÑÔ£¬¿ÉÒÔ¹«¿ª¶à¸ö¼¶±ðµÄ¸ú×Ù¡£TraceListenerÀࡪTextWriterTraceListenerºÍEventLogTraceListener½«TraceºÍDebug·½·¨µÄÊä³ö·Ö±ð¶¨Ïòµ½Îı¾ÎļþºÍʼþÈÕÖ¾¡£Òò´Ë£¬Äú¿ÉÒÔ½«¸ú×Ù¹¦ÄÜÌí¼Óµ½»ùÀàÖУ¬ÒÔ±ãÅÉÉúÀà¿ÉÒÔÇáËɵؼǼÏûÏ¢¡£¼Ì¶ø£¬Ó¦ÓóÌÐò¿ÉÒÔʹÓÃÓ¦ÓóÌÐòÅäÖÃÎļþÀ´¿ØÖÆÊÇ·ñÆôÓøú×Ù¡£Äú¿ÉÒÔͨ¹ý°üº¬Ò»¸öBooleanSwitchÀàÐ͵Ä˽ÓбäÁ¿²¢ÔÚ¹¹Ô캯ÊýÖн«ÆäʵÀý»¯£¬ÒÔ½«¸Ã¹¦ÄÜÌí¼Óµ½Í¼1ËùʾµÄDALBaseÀàÖУº
Public Sub New(ByVal connect As String)
¡¡_connection = New SqlConnection(connect)
¡¡_dalSwitch = New BooleanSwitch("DAL", "Data Access Code")
End Sub
|
BooleanSwitchµÄ²ÎÊý°üÀ¨ËüµÄÃû³ÆºÍ˵Ã÷¡£ÄúËæºó¿ÉÒÔÌí¼ÓÒ»¸öÊܱ£»¤ÊôÐÔ£¬ÒԱ㽫¿ª¹Ø´ò¿ªºÍ¹Ø±Õ£¬²¢Ìí¼ÓÁíÒ»¸öÊܱ£»¤ÊôÐÔ£¬ÒÔ±ãʹÓÃTrace¶ÔÏóµÄWriteLineIf·½·¨À´¸ñʽ»¯ºÍдÈë¸ú×ÙÏûÏ¢£º
Protected Property TracingEnabled() As Boolean
¡¡Get
¡¡¡¡Return _dalSwitch.Enabled
¡¡End Get
¡¡Set(ByVal Value As Boolean)
¡¡¡¡_dalSwitch.Enabled = Value
¡¡End Set
End Property
Protected Sub WriteTrace(ByVal message As String)
¡¡Trace.WriteLineIf(Me.TracingEnabled, Now & ": " & message)
End Sub
|
ÕâÑù£¬ÅÉÉúÀàÎÞÐë×Ô¼ºÁ˽⿪¹ØÀàºÍÕìÌýÆ÷À࣬¾Í¿ÉÒÔÔÚÊý¾Ý·ÃÎÊÀàÖз¢ÉúÖØ´óʼþʱÇáËɵص÷ÓÃWriteTrace·½·¨¡£
£¼?XML version="1.0" encoding="utf-8" ?£¾
£¼configuration£¾
£¼system.diagnostics£¾
£¼switches£¾
£¼add name="DAL" value="1" /£¾
£¼/switches£¾
£¼trace autoflush="true" indentsize="4"£¾
£¼listeners£¾
£¼add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="DALLog.txt"/£¾
£¼/listeners£¾
£¼/trace£¾
£¼/system.diagnostics£¾
£¼/configuration£¾
|
ͼ3 ¸ú×ÙÅäÖÃ
Òª´´½¨ÕìÌýÆ÷²¢½«Æä´ò¿ª£¬»¹¿ÉÒÔʹÓÃÓ¦ÓóÌÐòÅäÖÃÎļþ¡£Í¼3ÏÔʾÁËÒ»¸ö¼òµ¥µÄÅäÖÃÎļþ£¬Ëü´ò¿ª¸Õ¸ÕÏÔʾµÄDAL¿ª¹Ø£¬²¢Í¨¹ýÃûΪmyListenerµÄTextWriterTraceListener½«ËüµÄÊä³ö¶¨Ïòµ½DALLog.txtÎļþ¡£µ±È»£¬Äú»¹¿ÉÒÔͨ¹ý´ÓTraceListenerÀàÅÉÉú²¢½«ÕìÌýÆ÷Ö±½Ó°üº¬ÔÚDALÖУ¬À´Í¨¹ý±à³Ì·½Ê½´´½¨×Ô¼ºµÄÕìÌýÆ÷¡£
Public Class DALException : Inherits ApplicationException
¡¡Public Sub New()
¡¡¡¡MyBase.New()
¡¡End Sub
¡¡Public Sub New(ByVal message As String)
¡¡¡¡MyBase.New(message)
¡¡End Sub
¡¡Public Sub New(ByVal message As String, ByVal innerException As Exception)
¡¡¡¡MyBase.New(message, innerException)
¡¡End Sub
¡¡' Add custom members here
¡¡Public ConnectString As String
End Class
|
ͼ4 ×Ô¶¨ÒåÒì³£Àà
ºÁÎÞÒÉÎÊ£¬ÄúÓ¦¸ÃÀûÓõÄÁíÒ»¸ö»ù´¡½á¹¹Êǽṹ»¯Òì³£´¦Àí£¨SEH£©¡£ÔÚ×î»ù±¾µÄ¼¶±ð£¬DAL¿ÉÒÔ¹«¿ªËü×Ô¼º´ÓSystem.ApplicationException¼Ì³ÐµÄException¶ÔÏ󣬲¢ÇÒ»¹¿ÉÒÔ¹«¿ª×Ô¶¨Òå³ÉÔ±¡£ÀýÈ磬ͼ4ÖÐËùʾµÄDALException¶ÔÏó¿ÉÒÔÓÃÀ´°ü×°ÓÉÊý¾Ý·ÃÎÊÀàÖеĴúÂëÒý·¢µÄÒì³£¡£È»ºó£¬»ùÀà¿ÉÒÔ¹«¿ªÒ»¸öÊܱ£»¤µÄ·½·¨ÒÔ°ü×°Òì³£¡¢Ìî³ä×Ô¶¨Òå³ÉÔ±²¢½«Æä´«»Øµ÷Ó÷½£¬ÈçÏÂËùʾ£º
Protected Sub ThrowDALException(ByVal message As String, _
ByVal innerException As Exception)
Dim newMine As New DALException(message, innerException)
newMine.ConnectString = Me.Connection.ConnectionString
Me.WriteTrace(message & "{" & innerException.Message & "}")
Throw newMine
End Sub
|
ÕâÑù£¬ÅÉÉúÀà¿ÉÒÔÇáËɵص÷ÓÃÊܱ£»¤µÄ·½·¨£¬´«ÈëËù½Ø»ñµÄÌØ¶¨ÓÚÊý¾ÝµÄÒì³££¨Í¨³£ÎªSqlException»òOleDbException£©£¬²¢Ìí¼ÓÒ»¸öÓëÌØ¶¨Êý¾ÝÓòÓйصÄÏûÏ¢¡£»ùÀàÔÚDALExceptionÖаü×°¸ÃÒì³££¬²¢½«Æä´«»Øµ÷Ó÷½¡£ÕâʹµÃµ÷Ó÷½¿ÉÒÔʹÓõ¥¸öCatchÓï¾äÇáËɵز¶»ñÀ´×ÔDALµÄËùÓÐÒì³£¡£ÓйØÐÅÏ¢£¬Çë²ÎÔÄMSDNÉÏ·¢²¼µÄ
¡¶Exception Management Application Block Overview¡·Ò»ÎÄ£¨http£º//msdn.microsoft.com/library/default.ASP£¿url=/library/en-us/dnbda/html/emab-rm.asp£©¡£¸Ã¿ò¼Üͨ¹ýÒ»×é¶ÔÏó½«Òì³£µÄ·¢²¼ÓëÓ¦ÓóÌÐòÈÕÖ¾ñîºÏÔÚÒ»Æð¡£Êµ¼ÊÉÏ£¬Äú¿ÉÒÔͨ¹ý´Ó.NET
FrameworkÌṩµÄBaseApplicationExceptionÀà¼Ì³Ð×Ô¼ºµÄ×Ô¶¨ÒåÒì³£À࣬À´½«ËüÃDzåÈëµ½¸Ã¿ò¼ÜÖС£
¹æÔò4£º×ÐϸѡÔñÍⲿ½Ó¿Ú
µ±ÄúÉè¼ÆÊý¾Ý·ÃÎÊÀàµÄ·½·¨Ê±£¬ÐèÒª¿¼ÂÇËüÃǽ«ÈçºÎ½ÓÊպͷµ»ØÊý¾Ý¡£¶ÔÓÚ´ó¶àÊý¿ª·¢ÈËÔ±¶øÑÔ£¬ÓÐÈýÖÖÖ÷ҪѡÔñ£ºÖ±½ÓʹÓÃADO.NET¶ÔÏó¡¢Ê¹ÓÃXMLºÍʹÓÃ×Ô¶¨ÒåÀà¡£Èç¹ûÄúÒªÖ±½Ó¹«¿ªADO.net¶ÔÏó£¬Ôò¿ÉÒÔÀûÓÃÁ½¸ö±à³ÌÄ£ÐÍÖеÄÒ»¸ö¡£µÚÒ»¸öÄ£ÐͰüº¬DataSetºÍDataTable¶ÔÏó£¬ËüÃǶÔÓÚ¶Ï¿ªÁ¬½ÓµÄÊý¾Ý·ÃÎʺÜÓÐÓ᣹ØÓÚDataSet¼°Æä¹ØÁªµÄDataTable£¬ÒÑÔÚÐí¶àÎÄÕÂÖнøÐйý½éÉÜ£¬µ«ÊÇÔÚÐèÒª´¦ÀíÒѾÓë»ù´¡Êý¾Ý´æ´¢Çø¶Ï¿ªÁ¬½ÓµÄÊý¾Ýʱ£¬ËüÃǷdz£ÓÐÓ᣻»¾ä»°Ëµ£¬DataSet¿ÉÒÔÔÚÓ¦ÓòãÖ®¼ä´«µÝ£¬¼´Ê¹ÕâЩ²ã·Ö²¼ÔÚ²»Í¬µÄÎïÀíλÖÃÒ²¿ÉÒÔ½øÐд«µÝ£¬ÈçÔÚÒµÎñ²ãºÍÊý¾Ý·þÎñ²ã±»·ÅÔÚÓë±íʾ·þÎñ²»Í¬µÄ·þÎñÆ÷Ⱥ¼¯ÉϵÄÇé¿öÏ¡£
ÁíÍ⣬¶ÔÓÚͨ¹ý»ùÓÚXMLµÄWeb Service·µ»ØÊý¾ÝµÄÇé¿öÀ´Ëµ£¬DataSet¶ÔÏóÒ²ÊÇÀíÏëµÄÑ¡Ôñ£¬ÕâÊÇÒòΪËüÃÇ¿ÉÒÔÐòÁл¯£¬Òò¶ø¿ÉÒÔÔÚSOAPÏìÓ¦ÏûÏ¢Öзµ»Ø¡£ÕâÓбðÓÚʹÓÃʵÏÖIDataReader½Ó¿ÚµÄÀࣨÀýÈ磬SqlDataReaderºÍOleDbDataReader£©·ÃÎÊÊý¾Ý¡£ÕâЩÊý¾Ý¶ÁÈ¡Æ÷ÓÃÓÚÒÔÖ»½ø¡¢Ö»¶Á·½Ê½·ÃÎÊÊý¾Ý¡£ÕâÁ½ÕßÖ®¼äµÄ¾Þ´ó²îÒìÔÚÓÚ£ºDataSetºÍDataTable¶ÔÏó¿ÉÒÔ°´ÖµÔÚÓ¦ÓóÌÐòÓòÖ®¼ä£¨Òò¶øÒ²¿ÉÒÔÔÚÏàͬ»ò²»Í¬¼ÆËã»úÉϵĽø³ÌÖ®¼ä£©´«µÝ£¬¶øÊý¾Ý¶ÁÈ¡Æ÷Ôò¿ÉÒÔµ½´¦´«µÝ£¬²¢ÇÒ×ÜÊǰ´ÒýÓô«µÝ¡£Çë²Î¼ûͼ5£¬ÆäÖÐReadºÍGetValuesÊÇÔÚ·þÎñÆ÷½ø³ÌÖÐÖ´Ðе쬲¢ÇÒËüÃǵķµ»ØÖµ±»¸´ÖƵ½¿Í»§¶Ë¡£

ͼ5 Ô¶³Ì´¦ÀíÊý¾Ý¶ÁÈ¡Æ÷
¸Ãͼ×ÅÖØÏÔʾÁËÊý¾Ý¶ÁÈ¡Æ÷ÈçºÎ´æÔÚÓÚ´´½¨ËüµÄÓ¦ÓóÌÐòÓòÖУ¬ÒÔ¼°¶ÔËüµÄËùÓзÃÎÊÈçºÎÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ó¦ÓóÌÐòÓòÖ®¼ä²úÉúÍù·µÐг̡£ÕâÒâζ×Å£¬Ö»Óе±Êý¾Ý¶ÁÈ¡Æ÷ÔÚµ÷Ó÷½ËùÔÚµÄͬһӦÓóÌÐòÓòÖÐÖ´ÐÐʱ£¬Êý¾Ý·ÃÎÊ·½·¨²ÅÓ¦µ±·µ»ØÕâЩÊý¾Ý¶ÁÈ¡Æ÷¡£ÔÚʹÓÃÊý¾Ý¶ÁÈ¡Æ÷ʱ£¬»¹ÓÐÆäËûÁ½¸öÐèÒª¿¼ÂǵÄÎÊÌâ¡£
Ê×ÏÈ£¬ÔÚ´ÓÊý¾Ý·ÃÎÊÀàÖеķ½·¨·µ»ØÊý¾Ý¶ÁÈ¡Æ÷ʱ£¬ÐèÒª¿¼ÂÇÓë¸ÃÊý¾Ý¶ÁÈ¡Æ÷Ïà¹ØÁªµÄÁ¬½Ó¶ÔÏóµÄÉú´æÆÚ¡£Ä¬ÈÏÇé¿öÏ£¬ÔÚµ÷Ó÷½Ñ»··ÃÎÊÊý¾Ý¶ÁÈ¡Æ÷ʱ£¬Á¬½Ó»á±£³Ö·±Ã¦¡£Òź¶µÄÊÇ£¬µ±µ÷Ó÷½Íê³É¹¤×÷ʱ£¬Á¬½Ó½«±£³Ö¿ªÆô״̬£¬Òò´Ë²»»á·µ»Øµ½Á¬½Ó³Ø£¨Èç¹ûÆôÓÃÁ¬½Ó³ØµÄ»°£©¡£µ«ÊÇ£¬Äú¿ÉÒÔͨ¹ý½«CommandBehavior.CloseConnectionö¾ÙÖµ´«µÝ¸øÃüÁî¶ÔÏóµÄExecuteReader·½·¨£¬À´Ö¸Ê¾Êý¾Ý¶ÁÈ¡Æ÷ÔÚËüµÄClose·½·¨±»µ÷ÓÃʱ¹Ø±ÕÁ¬½Ó¡£
Æä´Î£¬ÎªÁ˽«±íʾ²ã´ÓÌØ¶¨µÄFramework data provider£¨ÀýÈçSqlClient»òOleDb£©·ÖÀ룬µ÷ÓôúÂëÓ¦µ±Ê¹ÓÃIDataReader½Ó¿Ú¶ø²»ÊǾßÌåÀàÐÍ£¨ÀýÈçSqlDataReader£©À´ÒýÓ÷µ»ØÖµ¡£ÕâÑù£¬Èç¹ûÓ¦ÓóÌÐò´ÓOracleÒÆÖ²µ½SQL
Serverºó¶Ë£¬²¢ÇÒÊý¾Ý·ÃÎÊÀàÖеķ½·¨µÄ·µ»ØÀàÐͽøÐÐÁ˸ü¸Ä£¬Ôò±íʾ²ãÎÞÐë¸ü¸Ä¡£Èç¹ûÄúÏ£ÍûÊý¾Ý·ÃÎÊÀà·µ»ØXML£¬Ôò¿ÉÒÔ´ÓSystem.XmlÃüÃû¿Õ¼äÖеÄXmlDocumentºÍXmlReaderÀࣨËüÃÇÀàËÆÓÚDataSetºÍIDataReader£©ÖнøÐÐÑ¡Ôñ¡£»»¾ä»°Ëµ£¬µ±Êý¾ÝÒª´ÓËüµÄÔ´¶Ï¿ªÁ¬½Óʱ£¬ÄúµÄ·½·¨Ó¦µ±·µ»ØXmlDocument£¨»òXmlDataDocument£©£¬¶øXmlReader¿ÉÒÔÓÃÀ´¶ÔXMLÊý¾Ý½øÐÐÁ÷ʽ·ÃÎÊ¡£
×îºó£¬Äú»¹¿ÉÒÔ¾ö¶¨Óù«¹²ÊôÐÔ·µ»Ø×Ô¶¨ÒåÀà¡£ÕâЩÀà¿ÉÒÔÓÃSerializationÊôÐÔ±ê¼Ç£¬ÒÔ±ãÄܹ»¿çÓ¦ÓóÌÐòÓò½øÐи´ÖÆ¡£ÁíÍ⣬Èç¹ûÄúÒª´Ó·½·¨Öзµ»Ø¶à¸ö¶ÔÏó£¬Ôò¿ÉÄÜÐèҪǿÀàÐͼ¯ºÏÀà¡£
Imports System.Xml.Serialization
£¼Serializable()£¾ _
Public Class Book : Implements IComparable
£¼XmlAttributeAttribute()£¾ Public ProductID As Integer
Public ISBN As String
Public Title As String
Public Author As String
Public UnitCost As Decimal
Public Description As String
Public PubDate As Date
Public Function CompareTo(ByVal o As Object) As Integer _
Implements IComparable.CompareTo
¡¡Dim b As Book = CType(o, Book)
¡¡Return Me.Title.CompareTo(b.Title)
End Function
End Class
Public NotInheritable Class BookCollection : Inherits ArrayList
Default Public Shadows Property Item(ByVal productId As Integer)
As Book
Get
¡¡Return Me(IndexOf(productId))
End Get
Set(ByVal Value As Book)
¡¡Me(IndexOf(productId)) = Value
End Set
End Property
Public Overloads Function Contains(ByVal productId As Integer) As Boolean
¡¡Return (-1 £¼£¾ IndexOf(productId))
End Function
Public Overloads Function IndexOf(ByVal productId As Integer) As Integer
¡¡Dim index As Integer = 0
¡¡Dim item As Book
¡¡For Each item In Me
¡¡¡¡If item.ProductID = productId Then
¡¡¡¡¡¡Return index
¡¡¡¡End If
¡¡¡¡index = index + 1
¡¡Next
¡¡Return -1
End Function
Public Overloads Sub RemoveAt(ByVal productId As Integer)
¡¡RemoveAt(IndexOf(productId))
End Sub
Public Shadows Function Add(ByVal value As Book) As Integer
¡¡Return MyBase.Add(value)
End Function
End Class
|
ͼ6 ʹÓÃÒ»¸ö×Ô¶¨ÒåÀà
ͼ6°üº¬ÁËÒ»¸ö¼òµ¥µÄBookÀ༰Æä¹ØÁªµÄ¼¯ºÏÀàµÄʾÀý¡£Äú»á·¢ÏÖ£¬BookÀàÓÃSerializable½øÐÐÁ˱ê¼Ç£¬ÒÔ±ã¿çÓ¦ÓóÌÐòÓòÆôÓá°°´Öµ£¨by
value£©¡±ÓïÒå¡£¸ÃÀàʵÏÖÁËIComparable½Ó¿Ú£¬ÒԱ㵱Ëü°üº¬ÔÚ¼¯ºÏÀàÖеÄʱºò£¬Ëü½«ÔÚĬÈÏÇé¿öϰ´TitleÅÅÐò¡£BookCollectionÀàÅÉÉú×ÔSystem.CollectionsÃüÃû¿Õ¼äÖеÄArrayList£¬²¢ÇÒÕÚ±ÎÁËItemÊôÐÔºÍAdd·½·¨£¬ÒԱ㽫¼¯ºÏÏÞÖÆÎª½ö°üº¬Book¶ÔÏó¡£Í¨¹ýʹÓÃ×Ô¶¨ÒåÀ࣬Äú¿ÉÒÔ»ñµÃ¶ÔÊý¾Ý±íʾ·½·¨µÄÍêÈ«¿ØÖÆ£¬Í¨¹ýÇ¿ÀàÐÍ»¯ºÍIntelliSenseÌá¸ß¿ª·¢ÈËÔ±µÄ¹¤×÷ЧÂÊ£¬²¢ÇÒÏû³ý¶ÔADO.NETµÄµ÷Ó÷½ÒÀÀµÐÔ¡£µ«ÊÇ£¬ÓÉÓÚ.NET
Framework²»°üº¬ÈκÎÓë¶ÔÏóÏà¹ØµÄÓ³Éä¼¼Êõ£¨³ýÁ˱¾ÖÊÉÏÊÇÅÉÉúµÄDataSetÀàµÄÀàÐÍ»¯DataSet¶ÔÏóÒÔÍ⣩£¬Òò´Ë¸Ã·½·¨ÐèÒª¸ü¶àµÄ´úÂë¡£ÔÚÕâЩÇé¿öÏ£¬Äúͨ³£ÒªÔÚÊý¾Ý·ÃÎÊÀàÖд´½¨Ò»¸öÊý¾Ý¶ÁÈ¡Æ÷£¬²¢ÇÒʹÓÃËüÀ´Ìî³ä×Ô¶¨ÒåÀà¡£
¹æÔò5£º³éÏó»¯.net Framework data provider
×îºóÒ»¸ö¹æÔòÖ¸¶¨£¬ÎªÊ²Ã´Ó¦¸Ã¶ÔÔÚDALÄÚ²¿Ê¹ÓõÄ.NET Framework data provider³éÏ󻯣¬ÒÔ¼°Ó¦¸ÃÈçºÎ½øÐгéÏó¡£ÕýÈçÎÒÒѾÌáµ½µÄÄÇÑù£¬ADO.NET±à³ÌÄ£Ð͹«¿ªÁ˶ÀÌØµÄ.NET
Framework data provider£¬°üÀ¨SqlClient¡¢OleDbºÍÆäËû¿É´Ó MSDN
ÔÚÏßWebÕ¾µãÉÏ»ñµÃµÄdata provider¡£¾¡¹Ü¸ÃÉè¼ÆÄܹ»Ìá¸ßÐÔÄÜ£¬²¢ÇÒʹproviderÄܹ»¹«¿ªÌض¨ÓÚÊý¾ÝÔ´µÄ¹¦ÄÜ£¨ÀýÈçSqlCommand¶ÔÏóµÄExecuteXMLReader·½·¨£©£¬µ«Ëü»áÆÈʹ¿ª·¢ÈËÔ±¾ö¶¨Õë¶ÔÄĸöprovider½øÐбàÂë¡£»»¾ä»°Ëµ£¬¿ª·¢ÈËԱͨ³£Ñ¡ÔñʹÓÃSqlClient»òOleDb£¬È»ºóÖ±½ÓÕë¶Ô¸÷¸öÃüÃû¿Õ¼äÖеÄÀà±àд´úÂë¡£
public enum ProviderType : int {SqlClient = 0, OLEDB = 1}
public class ProviderFactory {
¡¡public ProviderFactory(ProviderType provider) {
¡¡¡¡_pType = provider;
¡¡¡¡_initClass();
¡¡}
¡¡public ProviderFactory() {
¡¡¡¡_initClass();
¡¡}
¡¡private ProviderType _pType = ProviderType.SqlClient;
¡¡private bool _pTypeSet = false;
¡¡private Type[] _conType, _comType, _parmType, _daType;
¡¡private void _initClass() {
¡¡¡¡_conType = new Type[2];
¡¡¡¡_comType = new Type[2];
¡¡¡¡_parmType = new Type[2];
¡¡¡¡_daType = new Type[2];
¡¡¡¡// Initialize the types for the providers
¡¡¡¡_conType[(int)ProviderType.SqlClient] = typeof(SqlConnection);
¡¡¡¡_conType[(int)ProviderType.OLEDB] = typeof(OleDbConnection);
¡¡¡¡_comType[(int)ProviderType.SqlClient] = typeof(SqlCommand);
¡¡¡¡_comType[(int)ProviderType.OLEDB] = typeof(OleDbCommand);
¡¡¡¡_parmType[(int)ProviderType.SqlClient] = typeof(SqlParameter);
¡¡¡¡_parmType[(int)ProviderType.OLEDB] = typeof(OleDbParameter);
¡¡¡¡_daType[(int)ProviderType.SqlClient] = typeof(SqlDataAdapter);
¡¡¡¡_daType[(int)ProviderType.OLEDB] = typeof(OleDbDataAdapter);
¡¡}
¡¡public ProviderType Provider {
¡¡¡¡get {
¡¡¡¡¡¡return _pType;
¡¡¡¡}
¡¡¡¡set {
¡¡¡¡¡¡if (_pTypeSet) {
¡¡¡¡¡¡¡¡throw new ReadOnlyException("Provider already set to " + _pType.ToString());
¡¡¡¡¡¡}
¡¡¡¡¡¡else {
¡¡¡¡¡¡¡¡_pType = value;
¡¡¡¡¡¡¡¡_pTypeSet = true;
¡¡¡¡¡¡}
¡¡¡¡}
¡¡}
¡¡public IDataAdapter CreateDataAdapter(string commandText,IDbConnection connection) {
¡¡¡¡IDataAdapter d;
¡¡¡¡IDbDataAdapter da;
¡¡¡¡d = (IDataAdapter)Activator.CreateInstance(_daType[(int)_pType], false);
¡¡¡¡da = (IDbDataAdapter)d;
¡¡¡¡da.SelectCommand = this.CreateCommand(commandText, connection);
¡¡¡¡return d;
¡¡}
¡¡public IDataParameter CreateParameter(string paramName, DbType paramType) {
¡¡¡¡IDataParameter p;
¡¡¡¡p = (IDataParameter)Activator.CreateInstance(_parmType[(int)_pType], false);
¡¡¡¡p.ParameterName = paramName;
¡¡¡¡p.DbType = paramType;
¡¡¡¡return p;
¡¡}
¡¡public IDataParameter CreateParameter(string paramName, DbType paramType, Object value) {
¡¡¡¡IDataParameter p;
¡¡¡¡p = (IDataParameter)Activator.CreateInstance(_parmType[(int)_pType], false);
¡¡¡¡p.ParameterName = paramName;
¡¡¡¡p.DbType = paramType;
¡¡¡¡p.Value = value;
¡¡¡¡return p;
¡¡}
¡¡public IDbConnection CreateConnection(string connect) {
¡¡¡¡IDbConnection c;
¡¡¡¡c = (IDbConnection)Activator.CreateInstance(_conType[(int)_pType], false);
¡¡¡¡c.ConnectionString = connect;
¡¡¡¡return c;
¡¡}
¡¡public IDbCommand CreateCommand(string cmdText, IDbConnection connection) {
¡¡¡¡IDbCommand c;
¡¡¡¡c = (IDbCommand)Activator.CreateInstance(_comType[(int)_pType], false);
¡¡¡¡c.CommandText = cmdText;
¡¡¡¡c.Connection = connection;
¡¡¡¡return c;
¡¡}
}
|
ͼ7 Provider Factory
Èç¹ûÄúÒª¸ü¸Ä.NET Framework data provider£¬ÔòÐèÒªÖØÐ±àдÊý¾Ý·ÃÎÊ·½·¨µÄ´úÂ롣ΪÁ˱ÜÃâÕâÖÖÇé¿ö£¬¿ÉÒÔʹÓóÆÎª¡°³éÏ󹤳§£¨Abstrace
Factory£©¡±µÄÉè¼ÆÄ£Ê½¡£Ê¹ÓøÃģʽ£¬¿ÉÒÔÉú³ÉÒ»¸ö¼òµ¥µÄÀ࣬¸ÃÀཫ¹«¿ªÄܹ»»ùÓÚ±êʶ´«Èëµ½¹¹Ô캯ÊýµÄ.NET
Framework data providerµÄÐÅÏ¢À´´´½¨Ö÷ÒªµÄ.NET Framework data
provider¶ÔÏó£¨ÃüÁî¡¢Á¬½Ó¡¢Êý¾ÝÊÊÅäÆ÷ºÍ²ÎÊý£©µÄ·½·¨¡£Í¼7ÖеĴúÂëÏÔʾÁ˸ÃÀàµÄÒ»¸ö¼ò»¯µÄC#°æ±¾¡£ÎªÁËʹÓøÃÀ࣬Êý¾Ý·ÃÎÊÀàÖеĴúÂëÐèÒªÕë¶Ô.NET
Framework data providerʵÏֵĸ÷ÖÖ½Ó¿Ú£¨°üÀ¨IDbCommand¡¢IDbConnection¡¢IDataAdapterºÍIDataParameter£©½øÐбà³Ì¡£ÀýÈ磬ΪÁËÓÃÀ´×Ô²ÎÊý»¯´æ´¢¹ý³ÌµÄ½á¹ûÌî³äDataSet£¬Äú¿ÉÒÔÔÚÊý¾Ý·ÃÎÊÀàµÄ·½·¨ÄÚ²¿Ê¹ÓÃÒÔÏ´úÂ룺
Dim _pf As New ProviderFactory(ProviderType.SqlClient)
Dim cn As IDbConnection = _pf.CreateConnection(_connect)
Dim da As IDataAdapter = _pf.CreateDataAdapter("usp_GetBook", cn)
Dim db As IDbDataAdapter = CType(da, IDbDataAdapter)
db.SelectCommand.CommandType = CommandType.StoredProcedure
db.SelectCommand.Parameters.Add(_pf.CreateParameter("@productId", _
DbType.Int32, id))
Dim ds As New DataSet("Books")
da.Fill(ds)
|
ͨ³££¬ÄúÐèÒªÔÚÀ༶±ðÉùÃ÷ProviderFactory±äÁ¿£¬²¢ÇÒÔÚÊý¾Ý·ÃÎÊÀàµÄ¹¹Ô캯ÊýÖн«ÆäʵÀý»¯¡£ÁíÍ⣬¾ÍÏñÕâÀïÏÔʾµÄÄÇÑù£¬ËüµÄ¹¹Ô캯Êý½«ÓôÓÅäÖÃÎļþÖжÁÈ¡µÄdata
providerÌî³ä£¬¶ø²»ÊÇÓ²±àÂë¡£ÈçÄúÏëÏñµÄÄÇÑù£¬½«ProviderFactoryÌí¼Óµ½DAL»ùÀàÖлá·Ç³£ÃÀÃȻºó¿ÉÒÔ½«Ëü°üº¬ÔÚ³ÌÐò¼¯Öв¢·Ö·¢¸øÆäËû¿ª·¢ÈËÔ±¡£Äú»¹¿ÉÒÔ¸üÉîÈëÒ»²½£¬ÒÔ·â×°¿ª·¢ÈËÔ±·´¸´±àдµÄ³£¼ûADO.NET´úÂ롣ʵ¼ÊÉÏ£¬MicrosoftÒѾ·¢²¼ÁËÒ»¸öÄܹ»ÎªSQL
ServerÖ´Ðиù¦ÄܵÄÊý¾Ý·ÃÎÊÓ¦ÓóÌÐò¿é£¨²Î¼û¡¶Data Access Application Block
Overview¡·, http://msdn.microsoft.com/library/default.ASP?url=/library/en-us/dnbda/html/daab-rm.asp£©¡£
С½á
Éí´¦ÓÚWeb Serviceʱ´úÖ®ÖУ¬ÎÒÃǻṹ½¨Ô½À´Ô½¶àµÄÓ¦ÓóÌÐò¡ª´Ó¶ÀÁ¢µÄÓ¦ÓòãÀ´²Ù×ÝÊý¾Ý¡£Èç¹ûÄú×ñÑijЩ»ù±¾¹æÔò²¢×îÖÕ½«Æä×÷ΪһÖÖϰ¹ß£¬ÄÇô±àдÊý¾Ý·ÃÎÊ´úÂë»á±äµÃ¸ü¿ì¡¢¸üÈÝÒײ¢ÇÒ´úÂëÒ²»á¾ßÓиü¸ßµÄ¿ÉÖØÓÃÐÔ£¬´Ó¶ø½ÚÊ¡ÁËÓë·þÎñÆ÷Ö®¼äµÄ½»»¥²¢Ê¹ÄúÔÚ´úÂëÖб£³ÖÊý¾ÝµÄ¶ÀÁ¢¡£ |