gpt4 book ai didi

sql - vb.net 循环遍历查询结果

转载 作者:行者123 更新时间:2023-12-02 07:56:39 27 4
gpt4 key购买 nike

我熟悉 VB6 ADO 处理 SQL 查询和遍历记录集结果的方式。

但是,在 VB.Net 中查询服务器、循环结果和处理查询的正确方法是什么?我一直在使用的所有方式似乎都不稳定并且随机崩溃。

我一直在使用以下代码:

Public Function GetSQLTable(ByVal strSQL As String) As DataTable
Dim table As New DataTable
Dim adapt As SqlDataAdapter

Try
adapt = New SqlDataAdapter(strSQL, gconIntegration)
adapt.Fill(table)
Catch ex As Exception
LogError("GetSQLTable: " & ex.ToString(), "SQL: " & strSQL)
End Try

Return table
End Function

像这样使用它:

 Dim dt As DataTable
Dim lngRow As Long
Dim current As DataRow
Dim lngContact As long

Try
dt = GetSQLTable(strSQL)
For lngRow = 0 To dt.Rows.Count - 1
current = dt.Rows.Item(lngRow)
lngContact = current.Item("indvid")
DoSomething(lngContact)
Next
Catch ex As Exception
LogError("FindContact: " & ex.ToString(), "SQL: " & strSQL)
lngContact = -1
Finally
current = nothing
dt = nothing

最佳答案

我怀疑问题与您管理 gconIntegration 连接的方式有关。您正在努力尝试继续使用相同的连接。看看它住在哪里会很有帮助。

最好从池中获取"new"连接,让 .Net 为您操心。

此外,您的通用“GetSQLTable”代码缺少一个重要部分:它不允许设置参数,这告诉我您正在将它们直接构建到您的查询字符串中。这是灾难的根源:它将导致 SQL 注入(inject)安全漏洞。

还有一件事:不要在 .Net 中将对象设置为 Nothing。如果需要,要么处置它们,要么让它们自行脱离范围。

这是我从数据表中拉回数据表的常规方法:

Function GetSomeData(ByVal Table2ID As Integer)
Dim result As New DataTable

Dim sql As String = "SELECT Column1,Column2 FROM [Table1] WHERE Table2ID= @Table2ID"

Using cn As New SqlConnection( GetConnectionString() ), _
Using cmd As New SqlCommand(sql, cn)

cmd.Parameters.Add("@Table2ID", SqlDbType.Int).Value = Table2ID

Using rdr As SqlDataReader = cmd.ExecuteReader()
result.Load(rdr)
End Using
End Using
return result
End Function

关于该代码的一些注释:

  • Using 语句将保证关联对象在相应的End Using 处被释放。
  • 查询参数保持强类型,从不直接替换到查询字符串中,即使在将它们传输到服务器时也是如此。 Sql 数据和 Sql 代码从不混合。
  • 对于需要发送的每个查询,您确实需要一个单独的函数。这确实是一件好事,因为它可以为您的数据库构建一个强类型的接口(interface)。理想情况下,所有这些函数都在同一个类中,并且 GetConnectionString 函数是该类私有(private)的。在此数据层之外不会发生任何数据库访问。

关于sql - vb.net 循环遍历查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/596639/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com