来自 dao vb 背景的自学 ado.net。
搜索各种代码示例,我能够编写一些东西来从 sql 中的 pubs 数据库中提取一些数据。现在我正在尝试修改它以满足我的需要。因为我会经常访问数据库,所以我想避免一遍又一遍地重新创建我的对象(sqlconnection、sqldataadapter、dataset),而只在全局范围内创建一次。但是它们似乎被设计为在需要使用它们时使用它们的构造函数来连续构建它们。我能够找到解决大部分问题的方法,但我被困在几个地方。
- 如何将其连接
SqlDataAdapter
到SqlConnection
其构造函数的外部? - 在结果中引用特定“记录”而不使用 FOR EACH 遍历结果的语法是什么。
这是我的代码(这段代码只是为了学习如何使用它。它不是一个实际的应用程序)
Imports System.Data.SqlClient
Public Class SqlLink
Dim conn As New SqlConnection
Dim da As New SqlDataAdapter
Dim ds As New DataSet
Public Function Connect(ByVal sConnString As String) As Integer
'attempts to connect to database, returns error code
Try
conn.ConnectionString = sConnString
conn.Open()
Return 0
Catch ex As Exception
MsgBox(Err.Description)
Return Err.Number
End Try
End Function
Public Sub exampleroutine()
Dim TempRow As DataRow
'DO NOT WANT Dim da as new sqlDataAdapter("some query", conn)
'I DO NOT WANT TO DIM THE da HERE. I WANT IT DIM'D ONCE GLOBALLY
'HOW CAN I TIE THE da TO THE conn HERE OUTSIDE OF IT'S CONSTRUCTOR
da.SelectCommand.CommandText = "SELECT au_fname FROM authors where au_fname like '%ann%'"
da.Fill(ds)
For Each TempRow In ds.Tables(0).Rows
MsgBox(TempRow("au_fname"))
Next
da.SelectCommand.CommandText = "SELECT au_fname FROM authors where au_fname like '%reg%'"
da.Fill(ds)
'HOW TO GET A SPECIFIC 'RECORD' WITHOUT ITERATING THROUGH WITH A FOR EACH
'If ds.Tables(0).Rows.Count > 0 Then ???
End Sub
End Class
==================================================== ====
我制定了一个解决方案,但我不知道是否有人愿意或应该根据评论关注它,但是.. 只是为了结束,这就是我为解决这个问题所做的。
在 Connect 函数中,在 conn.Open 之后我添加了
da = New SqlDataAdapter(False, conn)
这创建了数据适配器的可重用全局实例。