我知道这里有很多关于我的错误的帖子,但我找不到直接帮助我的答案。
我创建了一个SQL类,因此我可以传递查询并接收数据,而不是每次调用单独的例程。我班的代码如下:
Imports MySql.Data.MySqlClient
Public Class SQLHandler
Public Function ReturnData(ByVal strSql As String) As DataTable
'method receives an sql query string and returns a dataTable
Try
Using ExQry As New MySqlCommand(strSql, MySQLConn)
Using da As New MySqlDataAdapter(ExQry)
Dim tempDT As New DataTable
da.Fill(tempDT)
da.Dispose()
ExQry.Dispose()
Return tempDT
End Using
End Using
Catch ex As Exception
CreateLog("Module: ReturnData()" & vbNewLine & "Exception Error: " & ex.Message)
MsgBox("Exception Error: " & ex.Message, MsgBoxStyle.Critical, "Module: ReturnData()")
Return Nothing
End Try
End Function
Public Function ReturnIntValue(ByVal strSql As String) As Integer
'method receives an sql query string and returns a integer
Try
Using ExQry As New MySqlCommand(strSql, MySQLConn)
Dim result As Integer = Convert.ToInt32(ExQry.ExecuteScalar())
ExQry.Dispose()
Return result
End Using
Catch ex As Exception
CreateLog("Module: ReturnIntValue()" & vbNewLine & "Exception Error: " & ex.Message)
MsgBox("Exception Error: " & ex.Message, MsgBoxStyle.Critical, "Module: ReturnIntValue()")
Return Nothing
End Try
End Function
End Class
一个函数是返回一个数据表,第二个函数返回一个值。 我遇到的问题是我的代码会对这个类进行各种调用(一个接一个),有时会返回一个数据表,有时会返回一个值。但是,我发现如果我在另一个查询后直接请求查询,我收到一个关于已经有一个打开的datareader的错误。
我不知道如何阻止我的代码等到查询完成并关闭之后再运行另一个。
我一直在ReturnIntValue函数中得到错误,所以我假设它在返回数据表之前调用了这个例程。
任何帮助将不胜感激。显然我做错了什么。 感谢
答案 0 :(得分:0)
尝试获取单个数据... 不使用Reader(基本上不使用Reader是安全的,因为当更多的计算机连接到它时它可能导致DB不稳定(避免DB.Close())
Dim SerialMac As New SqlConnection(CommandString)
Dim CMD As New SqlCommand
Dim sqlAdapter As SqlDataAdapter
Public Function getDataInDB(ByVal sQuery As String) As String
getDataInDB = Nothing
Try
CMD = New SqlCommand(sQuery, TestResult)
Dim sqlAdapter As SqlDataAdapter
Dim dataS As DataSet
sqlAdapter = New SqlDataAdapter(CMD)
dataS = New DataSet
sqlAdapter.Fill(dataS, "getRecord")
getDataInDB = dataS.Tables("getRecord").Rows(0).ItemArray(0).ToString()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
Plus在DataGridview上显示数据
Public Sub displayTestResults(ByRef mDataGridView As DataGridView, ByVal sQuery As String)
Try
connectToDB()
CMD = New SqlCommand(sQuery, TestResult)
Dim sqlAdapter As SqlDataAdapter
Dim dataS As DataSet
sqlAdapter = New SqlDataAdapter(CMD)
dataS = New DataSet
sqlAdapter.Fill(dataS, "Records")
mDataGridView.DataSource = dataS.Tables("Records")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
答案 1 :(得分:0)
在这里找到一篇很棒的文章[http://www.developerfusion.com/code/5445/sql-data-provider-vbnet-class/],其中提供了有关设置正确的SQL类以在整个应用程序中处理多个连接的详细信息。