system.invalidoperationexexcept Два вызова EndExeCuterEader и в обоих случаях его называют в функции обратного вызова, передаваемом методу betinexeCuterEader , например, так:
Код: Выделить всё
Dim Callback As New AsyncCallback(AddressOf EndExecuteAsync)
'(...)
Query.AsyncResult = Command.BeginExecuteReader(Callback, New Object() {Command, Query, CallbackDelegate, CallbackParameters})
'(...)
Return Query.AsyncResult
Функция EndExeCuteasync затем вызовет endexecutereader .
Public Sub EndExecuteAsync(ByVal ar As IAsyncResult)
'(...)
If Query IsNot Nothing Then
Try
Select Case Query.QueryType
Case MyQueryType.Normal
Using dr As SqlDataReader = Command.EndExecuteReader(ar)
'(...)
Case MyQueryType.Scalar
Using dr As SqlDataReader = Command.EndExecuteReader(ar)
Два вызова не могут быть названы, поскольку они в операторе Switch. версия? Поиск в Интернете здесь ничего не приводит к использованию; Нет результатов. < /p>
Они должны быть обратно совместимыми (но нет, уже не решены два вопроса, в которых устаревший парамет, который ничего не делал, и SSL должен был быть отключен). < /p>
Соответствующая страница MSDN: < /p>
p>sstem.data: https://learn.microsoft.com/en-us/dotne ... r?view=net -9 https://learn.microsoft.com/en-us/dotne ... net-9.0-pp
>
далеко: < /p>
Я выглядел несколько глубже, загружая и установив символы и настройку более продвинутой отладки, и обнаружил, что следующий (кажется, C#) код-это то, где он идет не так: < /p>
< /p>
Специально для меня: < /p>
cachedAsyncState.EndMethodName = null
< /code>
, когда это не должно быть; Это должно быть EndExeCuteAsync [/code] или что -то, что указывает на этот метод в моем собственном коде, хотя некоторые запутанные средства, но, конечно, не неопределенные/нулевые.
Как/почему все еще является открытым вопросом. Что если это вещь Global , и можно выполнить только один запрос на подключение/сеанс? Конечно, кажется, что комментарии для команды BetinexeCutereader указывают как таковые: < /p>
Код: Выделить всё
// Remarks:
// The Microsoft.Data.SqlClient.SqlCommand.BeginExecuteReader method starts the
// process of asynchronously executing a Transact-SQL statement or stored procedure
// that returns rows, so that other tasks can run concurrently while the statement
// is executing. When the statement has completed, developers must call the Microsoft.Data.SqlClient.SqlCommand.EndExecuteReader
// method to finish the operation and retrieve the Microsoft.Data.SqlClient.SqlDataReader
// returned by the command. The Microsoft.Data.SqlClient.SqlCommand.BeginExecuteReader
// method returns immediately, but until the code executes the corresponding Microsoft.Data.SqlClient.SqlCommand.EndExecuteReader
// method call, it must not execute any other calls that start a synchronous or
// asynchronous execution against the same Microsoft.Data.SqlClient.SqlCommand object.
// Calling the Microsoft.Data.SqlClient.SqlCommand.EndExecuteReader before the command's
// execution is completed causes the Microsoft.Data.SqlClient.SqlCommand object
// to block until the execution is finished.
< /code>
намного выше стека, я делаю что -то похожее на: < /p>
Dim qryResource As myQuery = loadResourceTable()
Dim qryMachine As myQuery = loadMachineTable()
' (etc.)
finishLoadingTable(dtResource, qryResource, "Resource")
finishLoadingTable(dtMachine, qryMachine, "Machine")
' (etc.)
Код: Выделить всё
Dim qryResource As myQuery = loadResourceTable()
finishLoadingTable(dtResource, qryResource, "Resource")
Dim qryMachine As myQuery = loadMachineTable()
finishLoadingTable(dtMachine, qryMachine, "Machine")
' (etc.)
< /code>
i.e. Если я подожду, пока команда не завершена, приведем к вызову endexecutereader
Так что пока я списываю способность использовать асинхронные запросы SQL в качестве сломанного до дальнейшего объяснения, чтобы сделать, как разъясняется.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... -error-bug