在Net,你需要把Try/Catch/Finally栏的数据库连接起来,并总是关闭最后一节的链接。 这个名称为<代码>Using的栏目有短处。 这意味着保持某种联系(正如你似乎正在做的那样)几乎总是错失。 该网络得到优化,从而能够更好地为每个查询点建立一个新的连接和指挥物体。
数据检索者很少是特别的:如果你把数据检索器从使用块中回收,在数据检索完成之前可以关闭链接。 在C#中,我通常会与一名继承人(收益回报)讨论这个问题。 自VB以来。 对这一构件缺乏支持,我可能使用“行动”(Of IDataRecord)
Public Sub MyOracleQuery(ByVal id As Integer, ByVal ProcessRecord As Action(Of IDataRecord))
Dim sql As String = "SELECT <columns> FROM MyTable WHERE ID= @Id"
Using cn As New OracleConnection("connection string"), _
cmd As New OracleCommand(sql, cn)
cmd.Parameters.Add("@Id", SqlDbTypes.Int).Value = id
cn.Open()
Using (rdr As IDataReader = cmd.ExecuteReader())
While rdr.Read()
ProcessRecord(rdr)
End While
End Using
End Using
End Sub
You can now pass an anonymous method to this code when you call it:
Dim id As Integer
If Integer.TryParse(IDTextBox.Text, id) Then
MyOracleQuery(id, _
Function(r)
#... Do something with each "r" here
End Function _
)
Else
# Complain to user about invalid ID
End If
请注意,这需要视力演播室2010年第4号,用于双向匿名方法。 对于旧的平台,你希望宣布这一方法。