gpt4 book ai didi

mysql - 在VB.NET中执行多个存储过程

转载 作者:行者123 更新时间:2023-11-29 12:04:57 33 4
gpt4 key购买 nike

我正在 VB.NET 中创建一个 WinService,以从表中获取一些数据,对这些数据执行一些操作,然后将新数据上传到该表中。我需要的是这样的:

Dim conn As New MySqlConnection(my_connString)
conn.Open()

Dim cmd As New MySqlCommand("my_Stored_Procedure_1", conn)
cmd.CommandType = CommandType.StoredProcedure

Dim reader As MySqlDataReader = cmd.ExecuteReader()

While reader.Read()
Try
' SP to SELECT Data from DB table '
Dim columnData As String
columnData = reader("ColumnName")
columnData_2 = reader("ColumnName_2")

' (...) Do something with this Data '

Try
' SP to UPDATE Data into the same DB table '
'cmd.Dispose() '
cmd = New MySqlCommand("my_Stored_Procedure_2", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.ExecuteReader()

' (...) Do something else '

Catch ex As Exception
Console.WriteLine("ERROR: " & ex.Message)
End Try
Catch ex As Exception
Console.WriteLine("ERROR: " & ex.Message)
End Try
End While

reader.Close()
conn.Close()

问题是这不起作用。它说已经有一个与此连接关联的打开的DataReader,必须首先关闭它。因此我尝试创建不同的SQL命令,关闭并重新打开连接,并创建不同的连接,如建议的here,但是他们都没有成功。 This 类似乎很有用,但对于一个简单的(?)任务来说,这是很多代码。我读过很多类似的问题,但我还没有找到我需要的东西。

我该如何处理这个问题?一些帮助会很好。

最佳答案

这看起来确实像 the question 的重复项您链接到,但那里的答案没有提供有关如何修复错误的大量详细信息。正如错误所示,每个连接只能有一个打开的读取器,因此您需要使用不同的连接进行更新。你说你已经尝试过了,但也许你的尝试是错误的。正如链接问题中所建议的,您还应该使用 Using 语句进行资源管理。

所以,您可能想要这样的东西(当然未经测试!):

Try
Using conn1 As New MySqlConnection(my_connString),
conn2 As New MySqlConnection(my_connString)

conn1.Open()
conn2.Open()

Using cmd1 As New MySqlCommand("my_Stored_Procedure_1", conn1)
cmd1.CommandType = CommandType.StoredProcedure

Using reader1 As MySqlDataReader = cmd1.ExecuteReader()
While reader1.Read()
' SP to SELECT Data from DB table '
Dim columnData As String
columnData = reader1("ColumnName")
columnData_2 = reader1("ColumnName_2")

' (...) Do something with this Data '

' SP to UPDATE Data into the same DB table '
Using cmd2 As New MySqlCommand("my_Stored_Procedure_2", conn2)
cmd2.CommandType = CommandType.StoredProcedure
Using reader2 As MySqlDataReader = cmd2.ExecuteReader()
' (...) Do something else '
End Using ' reader2
End Using ' cmd2
End While
End Using ' reader1
End Using ' cmd1
End Using ' conn1, conn2
Catch ex As Exception
Console.WriteLine("ERROR: " & ex.Message)
End Try

正如您从嵌套级别中看到的,在资源范围方面发生了很多事情,因此您可能希望将其重构为多个方法。您还可以使用数据适配器来填充 DataTable 以获取 my_Stored_Procedure_1 的结果,而不是使用 DataReader,然后只需要一个连接(假设数据不太大)。

关于mysql - 在VB.NET中执行多个存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31664254/

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