Dataset+TableAdapter _.net最终数据访问类出现? 我的心血显然被藐视了
随着不断深入了解 2005 team suit 的IDE
我发现我错怪了M$ m$正在以一种极端激进的方式改变我们的数据访问模式
在.net 1.1框架下编写自己的数据访问类时 我曾经抱怨过 如果M$的dataset 能够像组件一样 可以把各种各样的 DataAdepter捆绑进去该多好啊 这样数据储存器和数据I/O就可以一起发布了 编写也方便,何苦要建立DataAccess工程阿
现在的Dataset 基本上满足了我幻想初步的一切需求: 拖拽数据表、 生成数据结构和填充器(TableAdapter) 、对每个填充器强类型化(编写程序的时候可以通过vs IDE提示来减少工作量 改写和阅读也更清晰)、每个填充器捆绑若干种强类型化select查询限定(以前每次都要自己写where 混乱不说 每个dataadapter 修改了selectcommand以后就成了巨大的废物)。。。。。种种功能都是我那被废弃的数据访问费尽千辛万苦达到了的或费尽千辛万苦也没能达到的。。
于是我开始利用这个构架疯狂的升级了我手头所有的工程!
作为纪念 把我曾经的心血贴出来 里面很多功能和现在的dataset 从思想根源是一致的
这个数据访问类是以dataset为存储核心 使用的时候 把这个组件拖到有dataadpter 和dataadapter生成数据集的地方(窗体 组件 服务皆可) 然后用MountDataAdepters()方法把dataadpters 全都引用就可以使用了
![](/Images/OutliningIndicators/ContractedBlock.gif)
永别了~曾经的数据访问类
1
Imports WayneWorks
2
Imports WayneWorks.Toolkits
3
Imports System.Data
4
Imports System.Data.SqlClient
5
Imports System.Data.OleDb
6
Imports System.Data.Odbc
7
Imports System.Data.OracleClient
8![](/Images/OutliningIndicators/None.gif)
9![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
Public Class DataAccessComponent1_1Class DataAccessComponent1_1
10
'基础据访问类
11
'用例 在继承的新类 New()函数中指定 dsAllTables 和 DBConnection
12
'并且将所有拖拽得到的 IDataAdepter 放入list
13
'DA2List(Me.SqlDataAdapter1, DACols)
14
'DA2List(Me.SqlDataAdapter2, DACols)
15
'DA2List(Me.SqlDataAdapter3, DACols)
16
'DA2List(Me.SqlDataAdapter4, DACols)
17
'DA2List(Me.SqlDataAdapter5, DACols)
18
'DA2List(Me.SqlDataAdapter6, DACols)
19
'DA2List(Me.SqlDataAdapter7, DACols)
20
'DA2List(Me.SqlDataAdapter8, DACols)
21![](/Images/OutliningIndicators/InBlock.gif)
22
Inherits System.ComponentModel.Component
23![](/Images/OutliningIndicators/InBlock.gif)
24![](/Images/OutliningIndicators/InBlock.gif)
25![](/Images/OutliningIndicators/InBlock.gif)
26![](/Images/OutliningIndicators/ContractedSubBlock.gif)
自定义的全局量#Region " 自定义的全局量 "
27![](/Images/OutliningIndicators/InBlock.gif)
28![](/Images/OutliningIndicators/InBlock.gif)
29![](/Images/OutliningIndicators/InBlock.gif)
30
Protected DACols As New SortedList '所有的DA列表
31
Protected WithEvents DsAllTables As DataSet '全局的数据集
32
Protected DBConnection As IDbConnection
33
Protected ConstStr As String
34
Protected ConstArray() As String '除了cst开头的表 所有常量表名
35![](/Images/OutliningIndicators/InBlock.gif)
36![](/Images/OutliningIndicators/InBlock.gif)
37
#End Region
38![](/Images/OutliningIndicators/InBlock.gif)
39![](/Images/OutliningIndicators/ContractedSubBlock.gif)
组件设计器生成的代码#Region " 组件设计器生成的代码 "
40![](/Images/OutliningIndicators/InBlock.gif)
41![](/Images/OutliningIndicators/InBlock.gif)
42![](/Images/OutliningIndicators/InBlock.gif)
43![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Sub New()Sub New(ByVal Container As System.ComponentModel.IContainer)
44
MyClass.New()
45![](/Images/OutliningIndicators/InBlock.gif)
46![](/Images/OutliningIndicators/InBlock.gif)
47
'Windows.Forms 类撰写设计器支持所必需的
48
Container.Add(Me)
49
End Sub
50![](/Images/OutliningIndicators/InBlock.gif)
51![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Sub New()Sub New()
52
MyBase.New()
53![](/Images/OutliningIndicators/InBlock.gif)
54
'该调用是组件设计器所必需的。
55
'InitializeComponent()
56![](/Images/OutliningIndicators/InBlock.gif)
57
''在 InitializeComponent() 调用之后添加任何初始化
58
'' Dim ConstString As String = "" ' "ADD_Roles,ADD_RolePowers,ADD_RoleList"
59
'Dim ViewString As String = "" '"CardMountsCardCount,vwProcessCount,vwProcessSameCount,vwServerUserCount"
60
' ConstArray = Split(ConstString, ",")
61![](/Images/OutliningIndicators/InBlock.gif)
62![](/Images/OutliningIndicators/InBlock.gif)
63![](/Images/OutliningIndicators/InBlock.gif)
64
'DA2List()
65![](/Images/OutliningIndicators/InBlock.gif)
66
'Me.DACols.Clear()
67![](/Images/OutliningIndicators/InBlock.gif)
68
'DA2List(Me.SqlDataAdapter1, DACols)
69
'DA2List(Me.SqlDataAdapter2, DACols)
70
'DA2List(Me.SqlDataAdapter3, DACols)
71
'DA2List(Me.SqlDataAdapter4, DACols)
72
'DA2List(Me.SqlDataAdapter5, DACols)
73
'DA2List(Me.SqlDataAdapter6, DACols)
74
'DA2List(Me.SqlDataAdapter7, DACols)
75
'DA2List(Me.SqlDataAdapter8, DACols)
76
'DA2List(Me.SqlDataAdapter9, DACols)
77
'DA2List(Me.SqlDataAdapter10, DACols)
78
'DA2List(Me.SqlDataAdapter11, DACols)
79
'DA2List(Me.SqlDataAdapter12, DACols)
80
'DA2List(Me.SqlDataAdapter13, DACols)
81
'DA2List(Me.SqlDataAdapter14, DACols)
82
'DA2List(Me.SqlDataAdapter15, DACols)
83
'DA2List(Me.SqlDataAdapter16, DACols)
84
'DA2List(Me.SqlDataAdapter17, DACols)
85
'DA2List(Me.SqlDataAdapter18, DACols)
86
'DA2List(Me.SqlDataAdapter19, DACols)
87
'DA2List(Me.SqlDataAdapter20, DACols)
88
'DA2List(Me.SqlDataAdapter21, DACols)
89
'DA2List(Me.SqlDataAdapter22, DACols)
90
'DA2List(Me.SqlDataAdapter23, DACols)
91
'DA2List(Me.SqlDataAdapter24, DACols)
92
'DA2List(Me.SqlDataAdapter25, DACols)
93
'DA2List(Me.SqlDataAdapter26, DACols)
94
'DA2List(Me.SqlDataAdapter27, DACols)
95
'DA2List(Me.SqlDataAdapter28, DACols)
96
'DA2List(Me.SqlDataAdapter29, DACols)
97
' DA2List(Me.SqlDataAdapter30, DACols)
98
' DA2List(Me.SqlDataAdapter31, DACols)
99
End Sub
100![](/Images/OutliningIndicators/InBlock.gif)
101![](/Images/OutliningIndicators/InBlock.gif)
102![](/Images/OutliningIndicators/InBlock.gif)
103![](/Images/OutliningIndicators/InBlock.gif)
104
'组件重写 dispose 以清理组件列表。
105![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)
106
If disposing Then
107
If Not (components Is Nothing) Then
108
components.Dispose()
109
End If
110
End If
111
MyBase.Dispose(disposing)
112
End Sub
113![](/Images/OutliningIndicators/InBlock.gif)
114
'组件设计器所必需的
115
Protected components As System.ComponentModel.IContainer
116![](/Images/OutliningIndicators/InBlock.gif)
117
'注意: 以下过程是组件设计器所必需的
118
'可以使用组件设计器修改此过程。
119
'不要使用代码编辑器修改它。
120![](/Images/OutliningIndicators/InBlock.gif)
121![](/Images/OutliningIndicators/InBlock.gif)
122![](/Images/OutliningIndicators/InBlock.gif)
123![](/Images/OutliningIndicators/InBlock.gif)
124
#End Region
125![](/Images/OutliningIndicators/InBlock.gif)
126![](/Images/OutliningIndicators/InBlock.gif)
127![](/Images/OutliningIndicators/InBlock.gif)
128![](/Images/OutliningIndicators/InBlock.gif)
129![](/Images/OutliningIndicators/ContractedSubBlock.gif)
功能实现代码#Region "功能实现代码"
130![](/Images/OutliningIndicators/InBlock.gif)
131![](/Images/OutliningIndicators/InBlock.gif)
132
'分析一组DA确定它的表名
133![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Sub MountDataAdepters()Sub MountDataAdepters(ByVal ParamArray DataAdepters() As Object)
134
Me.DACols.Clear()
135![](/Images/OutliningIndicators/InBlock.gif)
136
For Each da As Object In DataAdepters
137![](/Images/OutliningIndicators/InBlock.gif)
138
Dim ms As ITableMappingCollection = da.TableMappings
139
Dim m As ITableMapping = ms(0)
140
DACols.Add(m.DataSetTable, da)
141
Next
142![](/Images/OutliningIndicators/InBlock.gif)
143
End Sub
144![](/Images/OutliningIndicators/InBlock.gif)
145![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Property ConstTableName()Property ConstTableName() As String()
146
Get
147
Return ConstArray
148
End Get
149![](/Images/OutliningIndicators/InBlock.gif)
150
Set(ByVal Array As String())
151
ConstArray = Array
152![](/Images/OutliningIndicators/InBlock.gif)
153![](/Images/OutliningIndicators/InBlock.gif)
154
End Set
155![](/Images/OutliningIndicators/InBlock.gif)
156
End Property
157![](/Images/OutliningIndicators/InBlock.gif)
158![](/Images/OutliningIndicators/InBlock.gif)
159![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Property BaseDataSet()Property BaseDataSet() As DataSet
160![](/Images/OutliningIndicators/InBlock.gif)
161
Get
162
Return DsAllTables
163
End Get
164
Set(ByVal Value As DataSet)
165
DsAllTables = Value
166
End Set
167
End Property
168![](/Images/OutliningIndicators/InBlock.gif)
169![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Property DBConn()Property DBConn() As Data.IDbConnection
170![](/Images/OutliningIndicators/InBlock.gif)
171
Get
172
Return DBConnection
173
End Get
174
Set(ByVal Value As Data.IDbConnection)
175
Me.DBConnection = Value
176
End Set
177
End Property
178![](/Images/OutliningIndicators/InBlock.gif)
179![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable ReadOnly Property ConstTables()Property ConstTables() As System.Collections.SortedList
180
Get
181
Dim r As New SortedList
182
For Each s As String In ConstArray
183
r.Add(s, DsAllTables.Tables(s))
184![](/Images/OutliningIndicators/InBlock.gif)
185
Next
186
For Each t As DataTable In Me.DsAllTables.Tables
187
If t.TableName.StartsWith("cst") Then
188
r.Add(t.TableName, t)
189
End If
190![](/Images/OutliningIndicators/InBlock.gif)
191
Next
192
Return r
193![](/Images/OutliningIndicators/InBlock.gif)
194
End Get
195
End Property
196![](/Images/OutliningIndicators/InBlock.gif)
197![](/Images/OutliningIndicators/InBlock.gif)
198![](/Images/OutliningIndicators/InBlock.gif)
199![](/Images/OutliningIndicators/InBlock.gif)
200![](/Images/OutliningIndicators/InBlock.gif)
201![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Sub RefreshConst()Sub RefreshConst()
202
Dim tmpda As IDataAdapter
203
For Each v As Collections.DictionaryEntry In Me.DataAdepterList
204
If CStr(v.Key).StartsWith("cst") Then
205
DsAllTables.Tables(v.Key).Clear()
206
tmpda = v.Value
207
tmpda.Fill(Me.DsAllTables)
208
End If
209![](/Images/OutliningIndicators/InBlock.gif)
210
Next
211![](/Images/OutliningIndicators/InBlock.gif)
212![](/Images/OutliningIndicators/InBlock.gif)
213
For Each s As String In Me.ConstArray
214![](/Images/OutliningIndicators/InBlock.gif)
215
If DACols.ContainsKey(s) Then
216
DsAllTables.Tables(s).Clear()
217
tmpda = DACols(s)
218
tmpda.Fill(Me.DsAllTables)
219
End If
220
Next
221![](/Images/OutliningIndicators/InBlock.gif)
222
End Sub
223![](/Images/OutliningIndicators/InBlock.gif)
224![](/Images/OutliningIndicators/InBlock.gif)
225![](/Images/OutliningIndicators/InBlock.gif)
226![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Sub LoadConst()Sub LoadConst(ByVal xml As String)
227
Dim sr As System.IO.StringReader = New System.IO.StringReader(xml)
228
BaseDataSet.ReadXml(sr)
229
BaseDataSet.AcceptChanges()
230
End Sub
231![](/Images/OutliningIndicators/InBlock.gif)
232![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Sub Update()Sub Update()
233
Dim tmpda As IDataAdapter
234
For Each s As String In DACols.Keys
235
'If Array.IndexOf(Me.ConstArray, s) <> -1 Then
236
tmpda = DACols(s)
237
tmpda.Update(Me.DsAllTables)
238![](/Images/OutliningIndicators/InBlock.gif)
239
' End If
240
Next
241![](/Images/OutliningIndicators/InBlock.gif)
242
End Sub
243![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Sub Update()Sub Update(ByVal tbName As String)
244
Dim tmpda As IDataAdapter
245![](/Images/OutliningIndicators/InBlock.gif)
246
'If Array.IndexOf(Me.ConstArray, s) <> -1 Then
247
tmpda = DACols(tbName)
248
tmpda.Update(Me.DsAllTables)
249![](/Images/OutliningIndicators/InBlock.gif)
250
' End If
251![](/Images/OutliningIndicators/InBlock.gif)
252![](/Images/OutliningIndicators/InBlock.gif)
253
End Sub
254![](/Images/OutliningIndicators/InBlock.gif)
255![](/Images/OutliningIndicators/InBlock.gif)
256![](/Images/OutliningIndicators/InBlock.gif)
257![](/Images/OutliningIndicators/InBlock.gif)
258![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Property DataAdepterList()Property DataAdepterList() As System.Collections.SortedList
259![](/Images/OutliningIndicators/InBlock.gif)
260
Get
261
Return Me.DACols
262
End Get
263
Set(ByVal value As System.Collections.SortedList)
264
Me.DACols = value
265
End Set
266
End Property
267![](/Images/OutliningIndicators/InBlock.gif)
268![](/Images/OutliningIndicators/InBlock.gif)
269![](/Images/OutliningIndicators/InBlock.gif)
270![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Property ConstValues()Property ConstValues(ByVal TableName As String, ByVal ConstName As String, Optional ByVal Field As String = "Value", Optional ByVal Do_UPDATE As Boolean = False) As Object
271![](/Images/OutliningIndicators/InBlock.gif)
272
Get
273![](/Images/OutliningIndicators/InBlock.gif)
274![](/Images/OutliningIndicators/InBlock.gif)
275
Dim table As DataTable = Me.BaseDataSet.Tables(TableName)
276
Dim rs() As DataRow
277
rs = (table.Select("Name='" & ConstName & "'"))
278
If rs.Length = 0 Then
279
Throw New Exception("本常量表没有此常量")
280
Else
281
Dim r As DataRow = rs(0)
282![](/Images/OutliningIndicators/InBlock.gif)
283
Return r(Field)
284![](/Images/OutliningIndicators/InBlock.gif)
285![](/Images/OutliningIndicators/InBlock.gif)
286
End If
287![](/Images/OutliningIndicators/InBlock.gif)
288![](/Images/OutliningIndicators/InBlock.gif)
289
End Get
290
Set(ByVal Value As Object)
291![](/Images/OutliningIndicators/InBlock.gif)
292
Dim table As DataTable = Me.ConstTables(TableName)
293
Dim rs() As DataRow
294
rs = (table.Select("Name='" & ConstName & "'"))
295
If rs.Length = 0 Then
296
Throw New Exception("本常量表没有此常量")
297
Else
298
Dim r As DataRow = rs(0)
299
r(Field) = Value
300
If Do_UPDATE Then Me.UpdateSingleRow(r)
301![](/Images/OutliningIndicators/InBlock.gif)
302![](/Images/OutliningIndicators/InBlock.gif)
303
End If
304![](/Images/OutliningIndicators/InBlock.gif)
305
End Set
306
End Property
307![](/Images/OutliningIndicators/InBlock.gif)
308![](/Images/OutliningIndicators/InBlock.gif)
309![](/Images/OutliningIndicators/InBlock.gif)
310![](/Images/OutliningIndicators/InBlock.gif)
311![](/Images/OutliningIndicators/InBlock.gif)
312![](/Images/OutliningIndicators/InBlock.gif)
313![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Property ConstValues()Property ConstValues(ByVal TableName As String, ByVal ConstID As Long, Optional ByVal Field As String = "Value", Optional ByVal Do_UPDATE As Boolean = False) As Object
314![](/Images/OutliningIndicators/InBlock.gif)
315
Get
316![](/Images/OutliningIndicators/InBlock.gif)
317![](/Images/OutliningIndicators/InBlock.gif)
318
Dim table As DataTable = Me.BaseDataSet.Tables(TableName)
319
Dim rs() As DataRow
320
rs = (table.Select("ID=" & ConstID & ""))
321
If rs.Length = 0 Then
322
Throw New Exception("本常量表没有此常量")
323
Else
324
Try
325
Dim r As DataRow = rs(0)
326![](/Images/OutliningIndicators/InBlock.gif)
327
Return r(Field)
328
Catch e As Exception
329
Return Nothing
330
End Try
331![](/Images/OutliningIndicators/InBlock.gif)
332![](/Images/OutliningIndicators/InBlock.gif)
333
End If
334![](/Images/OutliningIndicators/InBlock.gif)
335![](/Images/OutliningIndicators/InBlock.gif)
336
End Get
337
Set(ByVal Value As Object)
338![](/Images/OutliningIndicators/InBlock.gif)
339
Dim table As DataTable = Me.ConstTables(TableName)
340
Dim rs() As DataRow
341
rs = (table.Select("ID='" & ConstID & "'"))
342
If rs.Length = 0 Then
343
Throw New Exception("本常量表没有此常量")
344
Else
345
Dim r As DataRow = rs(0)
346
r(Field) = Value
347
If Do_UPDATE Then Me.UpdateSingleRow(r)
348![](/Images/OutliningIndicators/InBlock.gif)
349![](/Images/OutliningIndicators/InBlock.gif)
350
End If
351![](/Images/OutliningIndicators/InBlock.gif)
352
End Set
353
End Property
354![](/Images/OutliningIndicators/InBlock.gif)
355![](/Images/OutliningIndicators/InBlock.gif)
356![](/Images/OutliningIndicators/InBlock.gif)
357![](/Images/OutliningIndicators/InBlock.gif)
358![](/Images/OutliningIndicators/InBlock.gif)
359![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Function UpdateSingleRow()Function UpdateSingleRow(ByVal row As DataRow) As DataRow
360![](/Images/OutliningIndicators/InBlock.gif)
361
Dim r(0) As DataRow
362
r(0) = row
363
Dim s() As String = Me.DataAdepterList(row.Table.TableName).GetType.ToString.Split(".")
364![](/Images/OutliningIndicators/InBlock.gif)
365
Select Case s(s.Length - 1)
366
Case "SqlDataAdapter"
367![](/Images/OutliningIndicators/InBlock.gif)
368
CType(Me.DataAdepterList(row.Table.TableName), SqlDataAdapter).Update(r)
369![](/Images/OutliningIndicators/InBlock.gif)
370
Case "OleDbDataAdapter"
371
CType(Me.DataAdepterList(row.Table.TableName), OleDbDataAdapter).Update(r)
372![](/Images/OutliningIndicators/InBlock.gif)
373
Case "OdbcDataAdapter"
374
CType(Me.DataAdepterList(row.Table.TableName), OdbcDataAdapter).Update(r)
375![](/Images/OutliningIndicators/InBlock.gif)
376
Case "OracleDataAdapter"
377
CType(Me.DataAdepterList(row.Table.TableName), OracleDataAdapter).Update(r)
378![](/Images/OutliningIndicators/InBlock.gif)
379
End Select
380![](/Images/OutliningIndicators/InBlock.gif)
381![](/Images/OutliningIndicators/InBlock.gif)
382![](/Images/OutliningIndicators/InBlock.gif)
383
Return r(0)
384![](/Images/OutliningIndicators/InBlock.gif)
385
End Function
386![](/Images/OutliningIndicators/InBlock.gif)
387![](/Images/OutliningIndicators/InBlock.gif)
388![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Function UpdateRows()Function UpdateRows(ByVal rows As DataRow()) As DataRow()
389
Dim s() As String = Me.DataAdepterList(rows(0).Table.TableName).GetType.ToString.Split(".")
390![](/Images/OutliningIndicators/InBlock.gif)
391
Select Case s(s.Length - 1)
392
Case "SqlDataAdapter"
393
CType(Me.DataAdepterList(rows(0).Table.TableName), SqlDataAdapter).Update(rows)
394![](/Images/OutliningIndicators/InBlock.gif)
395![](/Images/OutliningIndicators/InBlock.gif)
396
Case "OleDbDataAdapter"
397
CType(Me.DataAdepterList(rows(0).Table.TableName), OleDbDataAdapter).Update(rows)
398![](/Images/OutliningIndicators/InBlock.gif)
399![](/Images/OutliningIndicators/InBlock.gif)
400
Case "OdbcDataAdapter"
401
CType(Me.DataAdepterList(rows(0).Table.TableName), OdbcDataAdapter).Update(rows)
402![](/Images/OutliningIndicators/InBlock.gif)
403![](/Images/OutliningIndicators/InBlock.gif)
404
Case "OracleDataAdapter"
405
CType(Me.DataAdepterList(rows(0).Table.TableName), OdbcDataAdapter).Update(rows)
406![](/Images/OutliningIndicators/InBlock.gif)
407
End Select
408
Return rows
409![](/Images/OutliningIndicators/InBlock.gif)
410![](/Images/OutliningIndicators/InBlock.gif)
411![](/Images/OutliningIndicators/InBlock.gif)
412![](/Images/OutliningIndicators/InBlock.gif)
413
End Function
414![](/Images/OutliningIndicators/InBlock.gif)
415![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Overridable Function BeginTransaction()Function BeginTransaction() As IDbTransaction
416![](/Images/OutliningIndicators/InBlock.gif)
417
Dim t As Data.IDbTransaction = Me.DBConnection.BeginTransaction()
418![](/Images/OutliningIndicators/InBlock.gif)
419
For Each dao As Object In Me.DataAdepterList.Values
420
Dim s() As String = dao.GetType.ToString.Split(".")
421![](/Images/OutliningIndicators/InBlock.gif)
422
Select Case s(s.Length - 1)
423
Case "SqlDataAdapter"
424
Dim da As SqlDataAdapter = dao
425
If Not da.InsertCommand Is Nothing Then da.InsertCommand.Transaction = t
426
If Not da.DeleteCommand Is Nothing Then da.DeleteCommand.Transaction = t
427
If Not da.UpdateCommand Is Nothing Then da.UpdateCommand.Transaction = t
428
If Not da.SelectCommand Is Nothing Then da.SelectCommand.Transaction = t
429![](/Images/OutliningIndicators/InBlock.gif)
430
Case "OleDbDataAdapter"
431
Dim da As OleDbDataAdapter = dao
432
If Not da.InsertCommand Is Nothing Then da.InsertCommand.Transaction = t
433
If Not da.DeleteCommand Is Nothing Then da.DeleteCommand.Transaction = t
434
If Not da.UpdateCommand Is Nothing Then da.UpdateCommand.Transaction = t
435
If Not da.SelectCommand Is Nothing Then da.SelectCommand.Transaction = t
436![](/Images/OutliningIndicators/InBlock.gif)
437
Case "OdbcDataAdapter"
438![](/Images/OutliningIndicators/InBlock.gif)
439
Dim da As OdbcDataAdapter = dao
440
If Not da.InsertCommand Is Nothing Then da.InsertCommand.Transaction = t
441
If Not da.DeleteCommand Is Nothing Then da.DeleteCommand.Transaction = t
442
If Not da.UpdateCommand Is Nothing Then da.UpdateCommand.Transaction = t
443
If Not da.SelectCommand Is Nothing Then da.SelectCommand.Transaction = t
444![](/Images/OutliningIndicators/InBlock.gif)
445
Case "OracleDataAdapter"
446
Dim da As OracleDataAdapter = dao
447
If Not da.InsertCommand Is Nothing Then da.InsertCommand.Transaction = t
448
If Not da.DeleteCommand Is Nothing Then da.DeleteCommand.Transaction = t
449
If Not da.UpdateCommand Is Nothing Then da.UpdateCommand.Transaction = t
450
If Not da.SelectCommand Is Nothing Then da.SelectCommand.Transaction = t
451
End Select
452![](/Images/OutliningIndicators/InBlock.gif)
453![](/Images/OutliningIndicators/InBlock.gif)
454![](/Images/OutliningIndicators/InBlock.gif)
455
Next
456
Return t
457
End Function
458![](/Images/OutliningIndicators/InBlock.gif)
459![](/Images/OutliningIndicators/InBlock.gif)
460![](/Images/OutliningIndicators/InBlock.gif)
461![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
Public Function XmlText()Function XmlText() As String
462
Dim sw As System.IO.StringWriter = New System.IO.StringWriter
463
BaseDataSet.WriteXml(sw)
464![](/Images/OutliningIndicators/InBlock.gif)
465
Return sw.ToString
466
End Function
467![](/Images/OutliningIndicators/InBlock.gif)
468![](/Images/OutliningIndicators/InBlock.gif)
469
#End Region
470![](/Images/OutliningIndicators/InBlock.gif)
471![](/Images/OutliningIndicators/InBlock.gif)
472![](/Images/OutliningIndicators/InBlock.gif)
473![](/Images/OutliningIndicators/InBlock.gif)
474![](/Images/OutliningIndicators/InBlock.gif)
475![](/Images/OutliningIndicators/InBlock.gif)
476
End Class
477![](/Images/OutliningIndicators/None.gif)
478
我发现我错怪了M$ m$正在以一种极端激进的方式改变我们的数据访问模式
在.net 1.1框架下编写自己的数据访问类时 我曾经抱怨过 如果M$的dataset 能够像组件一样 可以把各种各样的 DataAdepter捆绑进去该多好啊 这样数据储存器和数据I/O就可以一起发布了 编写也方便,何苦要建立DataAccess工程阿
现在的Dataset 基本上满足了我幻想初步的一切需求: 拖拽数据表、 生成数据结构和填充器(TableAdapter) 、对每个填充器强类型化(编写程序的时候可以通过vs IDE提示来减少工作量 改写和阅读也更清晰)、每个填充器捆绑若干种强类型化select查询限定(以前每次都要自己写where 混乱不说 每个dataadapter 修改了selectcommand以后就成了巨大的废物)。。。。。种种功能都是我那被废弃的数据访问费尽千辛万苦达到了的或费尽千辛万苦也没能达到的。。
于是我开始利用这个构架疯狂的升级了我手头所有的工程!
作为纪念 把我曾经的心血贴出来 里面很多功能和现在的dataset 从思想根源是一致的
这个数据访问类是以dataset为存储核心 使用的时候 把这个组件拖到有dataadpter 和dataadapter生成数据集的地方(窗体 组件 服务皆可) 然后用MountDataAdepters()方法把dataadpters 全都引用就可以使用了
![](/Images/OutliningIndicators/ContractedBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
1
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/InBlock.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/InBlock.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/InBlock.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/InBlock.gif)
159
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
160
![](/Images/OutliningIndicators/InBlock.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/InBlock.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/InBlock.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/InBlock.gif)
183
![](/Images/OutliningIndicators/InBlock.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/InBlock.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/InBlock.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/InBlock.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/InBlock.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/InBlock.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/InBlock.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/InBlock.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/InBlock.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/InBlock.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/InBlock.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/InBlock.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/InBlock.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/InBlock.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/InBlock.gif)
219
![](/Images/OutliningIndicators/InBlock.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/InBlock.gif)
222
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
223
![](/Images/OutliningIndicators/InBlock.gif)
224
![](/Images/OutliningIndicators/InBlock.gif)
225
![](/Images/OutliningIndicators/InBlock.gif)
226
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
227
![](/Images/OutliningIndicators/InBlock.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/InBlock.gif)
230
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
231
![](/Images/OutliningIndicators/InBlock.gif)
232
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
233
![](/Images/OutliningIndicators/InBlock.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/InBlock.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/InBlock.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/InBlock.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
243
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/InBlock.gif)
246
![](/Images/OutliningIndicators/InBlock.gif)
247
![](/Images/OutliningIndicators/InBlock.gif)
248
![](/Images/OutliningIndicators/InBlock.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/InBlock.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/InBlock.gif)
253
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
254
![](/Images/OutliningIndicators/InBlock.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/InBlock.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/InBlock.gif)
261
![](/Images/OutliningIndicators/InBlock.gif)
262
![](/Images/OutliningIndicators/InBlock.gif)
263
![](/Images/OutliningIndicators/InBlock.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
267
![](/Images/OutliningIndicators/InBlock.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/InBlock.gif)
270
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
271
![](/Images/OutliningIndicators/InBlock.gif)
272
![](/Images/OutliningIndicators/InBlock.gif)
273
![](/Images/OutliningIndicators/InBlock.gif)
274
![](/Images/OutliningIndicators/InBlock.gif)
275
![](/Images/OutliningIndicators/InBlock.gif)
276
![](/Images/OutliningIndicators/InBlock.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/InBlock.gif)
279
![](/Images/OutliningIndicators/InBlock.gif)
280
![](/Images/OutliningIndicators/InBlock.gif)
281
![](/Images/OutliningIndicators/InBlock.gif)
282
![](/Images/OutliningIndicators/InBlock.gif)
283
![](/Images/OutliningIndicators/InBlock.gif)
284
![](/Images/OutliningIndicators/InBlock.gif)
285
![](/Images/OutliningIndicators/InBlock.gif)
286
![](/Images/OutliningIndicators/InBlock.gif)
287
![](/Images/OutliningIndicators/InBlock.gif)
288
![](/Images/OutliningIndicators/InBlock.gif)
289
![](/Images/OutliningIndicators/InBlock.gif)
290
![](/Images/OutliningIndicators/InBlock.gif)
291
![](/Images/OutliningIndicators/InBlock.gif)
292
![](/Images/OutliningIndicators/InBlock.gif)
293
![](/Images/OutliningIndicators/InBlock.gif)
294
![](/Images/OutliningIndicators/InBlock.gif)
295
![](/Images/OutliningIndicators/InBlock.gif)
296
![](/Images/OutliningIndicators/InBlock.gif)
297
![](/Images/OutliningIndicators/InBlock.gif)
298
![](/Images/OutliningIndicators/InBlock.gif)
299
![](/Images/OutliningIndicators/InBlock.gif)
300
![](/Images/OutliningIndicators/InBlock.gif)
301
![](/Images/OutliningIndicators/InBlock.gif)
302
![](/Images/OutliningIndicators/InBlock.gif)
303
![](/Images/OutliningIndicators/InBlock.gif)
304
![](/Images/OutliningIndicators/InBlock.gif)
305
![](/Images/OutliningIndicators/InBlock.gif)
306
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
307
![](/Images/OutliningIndicators/InBlock.gif)
308
![](/Images/OutliningIndicators/InBlock.gif)
309
![](/Images/OutliningIndicators/InBlock.gif)
310
![](/Images/OutliningIndicators/InBlock.gif)
311
![](/Images/OutliningIndicators/InBlock.gif)
312
![](/Images/OutliningIndicators/InBlock.gif)
313
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
314
![](/Images/OutliningIndicators/InBlock.gif)
315
![](/Images/OutliningIndicators/InBlock.gif)
316
![](/Images/OutliningIndicators/InBlock.gif)
317
![](/Images/OutliningIndicators/InBlock.gif)
318
![](/Images/OutliningIndicators/InBlock.gif)
319
![](/Images/OutliningIndicators/InBlock.gif)
320
![](/Images/OutliningIndicators/InBlock.gif)
321
![](/Images/OutliningIndicators/InBlock.gif)
322
![](/Images/OutliningIndicators/InBlock.gif)
323
![](/Images/OutliningIndicators/InBlock.gif)
324
![](/Images/OutliningIndicators/InBlock.gif)
325
![](/Images/OutliningIndicators/InBlock.gif)
326
![](/Images/OutliningIndicators/InBlock.gif)
327
![](/Images/OutliningIndicators/InBlock.gif)
328
![](/Images/OutliningIndicators/InBlock.gif)
329
![](/Images/OutliningIndicators/InBlock.gif)
330
![](/Images/OutliningIndicators/InBlock.gif)
331
![](/Images/OutliningIndicators/InBlock.gif)
332
![](/Images/OutliningIndicators/InBlock.gif)
333
![](/Images/OutliningIndicators/InBlock.gif)
334
![](/Images/OutliningIndicators/InBlock.gif)
335
![](/Images/OutliningIndicators/InBlock.gif)
336
![](/Images/OutliningIndicators/InBlock.gif)
337
![](/Images/OutliningIndicators/InBlock.gif)
338
![](/Images/OutliningIndicators/InBlock.gif)
339
![](/Images/OutliningIndicators/InBlock.gif)
340
![](/Images/OutliningIndicators/InBlock.gif)
341
![](/Images/OutliningIndicators/InBlock.gif)
342
![](/Images/OutliningIndicators/InBlock.gif)
343
![](/Images/OutliningIndicators/InBlock.gif)
344
![](/Images/OutliningIndicators/InBlock.gif)
345
![](/Images/OutliningIndicators/InBlock.gif)
346
![](/Images/OutliningIndicators/InBlock.gif)
347
![](/Images/OutliningIndicators/InBlock.gif)
348
![](/Images/OutliningIndicators/InBlock.gif)
349
![](/Images/OutliningIndicators/InBlock.gif)
350
![](/Images/OutliningIndicators/InBlock.gif)
351
![](/Images/OutliningIndicators/InBlock.gif)
352
![](/Images/OutliningIndicators/InBlock.gif)
353
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
354
![](/Images/OutliningIndicators/InBlock.gif)
355
![](/Images/OutliningIndicators/InBlock.gif)
356
![](/Images/OutliningIndicators/InBlock.gif)
357
![](/Images/OutliningIndicators/InBlock.gif)
358
![](/Images/OutliningIndicators/InBlock.gif)
359
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
360
![](/Images/OutliningIndicators/InBlock.gif)
361
![](/Images/OutliningIndicators/InBlock.gif)
362
![](/Images/OutliningIndicators/InBlock.gif)
363
![](/Images/OutliningIndicators/InBlock.gif)
364
![](/Images/OutliningIndicators/InBlock.gif)
365
![](/Images/OutliningIndicators/InBlock.gif)
366
![](/Images/OutliningIndicators/InBlock.gif)
367
![](/Images/OutliningIndicators/InBlock.gif)
368
![](/Images/OutliningIndicators/InBlock.gif)
369
![](/Images/OutliningIndicators/InBlock.gif)
370
![](/Images/OutliningIndicators/InBlock.gif)
371
![](/Images/OutliningIndicators/InBlock.gif)
372
![](/Images/OutliningIndicators/InBlock.gif)
373
![](/Images/OutliningIndicators/InBlock.gif)
374
![](/Images/OutliningIndicators/InBlock.gif)
375
![](/Images/OutliningIndicators/InBlock.gif)
376
![](/Images/OutliningIndicators/InBlock.gif)
377
![](/Images/OutliningIndicators/InBlock.gif)
378
![](/Images/OutliningIndicators/InBlock.gif)
379
![](/Images/OutliningIndicators/InBlock.gif)
380
![](/Images/OutliningIndicators/InBlock.gif)
381
![](/Images/OutliningIndicators/InBlock.gif)
382
![](/Images/OutliningIndicators/InBlock.gif)
383
![](/Images/OutliningIndicators/InBlock.gif)
384
![](/Images/OutliningIndicators/InBlock.gif)
385
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
386
![](/Images/OutliningIndicators/InBlock.gif)
387
![](/Images/OutliningIndicators/InBlock.gif)
388
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
389
![](/Images/OutliningIndicators/InBlock.gif)
390
![](/Images/OutliningIndicators/InBlock.gif)
391
![](/Images/OutliningIndicators/InBlock.gif)
392
![](/Images/OutliningIndicators/InBlock.gif)
393
![](/Images/OutliningIndicators/InBlock.gif)
394
![](/Images/OutliningIndicators/InBlock.gif)
395
![](/Images/OutliningIndicators/InBlock.gif)
396
![](/Images/OutliningIndicators/InBlock.gif)
397
![](/Images/OutliningIndicators/InBlock.gif)
398
![](/Images/OutliningIndicators/InBlock.gif)
399
![](/Images/OutliningIndicators/InBlock.gif)
400
![](/Images/OutliningIndicators/InBlock.gif)
401
![](/Images/OutliningIndicators/InBlock.gif)
402
![](/Images/OutliningIndicators/InBlock.gif)
403
![](/Images/OutliningIndicators/InBlock.gif)
404
![](/Images/OutliningIndicators/InBlock.gif)
405
![](/Images/OutliningIndicators/InBlock.gif)
406
![](/Images/OutliningIndicators/InBlock.gif)
407
![](/Images/OutliningIndicators/InBlock.gif)
408
![](/Images/OutliningIndicators/InBlock.gif)
409
![](/Images/OutliningIndicators/InBlock.gif)
410
![](/Images/OutliningIndicators/InBlock.gif)
411
![](/Images/OutliningIndicators/InBlock.gif)
412
![](/Images/OutliningIndicators/InBlock.gif)
413
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
414
![](/Images/OutliningIndicators/InBlock.gif)
415
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
416
![](/Images/OutliningIndicators/InBlock.gif)
417
![](/Images/OutliningIndicators/InBlock.gif)
418
![](/Images/OutliningIndicators/InBlock.gif)
419
![](/Images/OutliningIndicators/InBlock.gif)
420
![](/Images/OutliningIndicators/InBlock.gif)
421
![](/Images/OutliningIndicators/InBlock.gif)
422
![](/Images/OutliningIndicators/InBlock.gif)
423
![](/Images/OutliningIndicators/InBlock.gif)
424
![](/Images/OutliningIndicators/InBlock.gif)
425
![](/Images/OutliningIndicators/InBlock.gif)
426
![](/Images/OutliningIndicators/InBlock.gif)
427
![](/Images/OutliningIndicators/InBlock.gif)
428
![](/Images/OutliningIndicators/InBlock.gif)
429
![](/Images/OutliningIndicators/InBlock.gif)
430
![](/Images/OutliningIndicators/InBlock.gif)
431
![](/Images/OutliningIndicators/InBlock.gif)
432
![](/Images/OutliningIndicators/InBlock.gif)
433
![](/Images/OutliningIndicators/InBlock.gif)
434
![](/Images/OutliningIndicators/InBlock.gif)
435
![](/Images/OutliningIndicators/InBlock.gif)
436
![](/Images/OutliningIndicators/InBlock.gif)
437
![](/Images/OutliningIndicators/InBlock.gif)
438
![](/Images/OutliningIndicators/InBlock.gif)
439
![](/Images/OutliningIndicators/InBlock.gif)
440
![](/Images/OutliningIndicators/InBlock.gif)
441
![](/Images/OutliningIndicators/InBlock.gif)
442
![](/Images/OutliningIndicators/InBlock.gif)
443
![](/Images/OutliningIndicators/InBlock.gif)
444
![](/Images/OutliningIndicators/InBlock.gif)
445
![](/Images/OutliningIndicators/InBlock.gif)
446
![](/Images/OutliningIndicators/InBlock.gif)
447
![](/Images/OutliningIndicators/InBlock.gif)
448
![](/Images/OutliningIndicators/InBlock.gif)
449
![](/Images/OutliningIndicators/InBlock.gif)
450
![](/Images/OutliningIndicators/InBlock.gif)
451
![](/Images/OutliningIndicators/InBlock.gif)
452
![](/Images/OutliningIndicators/InBlock.gif)
453
![](/Images/OutliningIndicators/InBlock.gif)
454
![](/Images/OutliningIndicators/InBlock.gif)
455
![](/Images/OutliningIndicators/InBlock.gif)
456
![](/Images/OutliningIndicators/InBlock.gif)
457
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
458
![](/Images/OutliningIndicators/InBlock.gif)
459
![](/Images/OutliningIndicators/InBlock.gif)
460
![](/Images/OutliningIndicators/InBlock.gif)
461
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
462
![](/Images/OutliningIndicators/InBlock.gif)
463
![](/Images/OutliningIndicators/InBlock.gif)
464
![](/Images/OutliningIndicators/InBlock.gif)
465
![](/Images/OutliningIndicators/InBlock.gif)
466
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
467
![](/Images/OutliningIndicators/InBlock.gif)
468
![](/Images/OutliningIndicators/InBlock.gif)
469
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
470
![](/Images/OutliningIndicators/InBlock.gif)
471
![](/Images/OutliningIndicators/InBlock.gif)
472
![](/Images/OutliningIndicators/InBlock.gif)
473
![](/Images/OutliningIndicators/InBlock.gif)
474
![](/Images/OutliningIndicators/InBlock.gif)
475
![](/Images/OutliningIndicators/InBlock.gif)
476
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
477
![](/Images/OutliningIndicators/None.gif)
478
![](/Images/OutliningIndicators/None.gif)