Будет ли Sqldatareader с использованием Statement когда-либо возвращать выходной параметр? - PullRequest
2 голосов
/ 21 августа 2011

Вот простой фрагмент кода большей функции в качестве примера.

Using conn as New SqlConnection("conn string")
    Using find as new SqlCommand("ExampleProc",conn)
        Dim rParam as new SqlParameter("@RESULT",SqlDbType.Int)
        rParam.Direction = ParameterDirection.Output
        find.Pareameters.Add(rParam)

        Using f as SqlDataReader = find.ExecuteReader
              'Do stuff with datareader
        End Using

        updateResult.Success = Convert.ToBoolean(find.Parameters("@RESULT").Value)
    End Using
  End Using

Я знаю, что выходной параметр возвращается после закрытия SqlDataReader. Из того, что я думаю, я знаю, оператор Using вызовет .Dispose в SqlDataReader, так что это в основном уничтожит параметр Output? Если это так, то какой метод лучше всего вызвать SqlDataReader, который также содержит параметры вывода, который закрывает и удаляет все правильно? Я не мог найти какую-либо конкретную информацию или примеры в Интернете в моем поиске. Спасибо!


Позвольте мне добавить, что, исходя из того, что я прочитал, у вас есть доступ к параметру Output только через SqlDataReader после вызова .Close для SqlDataReader.

Ответы [ 2 ]

1 голос
/ 21 августа 2011

Вам действительно нужно только значение , возвращаемое в выходном параметре.

Вы можете скопировать значение в переменную, объявленную вне блока Using, и вернуть ее или вернуть значение напрямую, как только у вас будет к нему доступ.

0 голосов
/ 21 августа 2011

не уверен, что я понимаю, чего вы хотите достичь, но этот подход кажется более подходящим

    updateResult.Success = False

    Using f as SqlDataReader = find.ExecuteReader
          'Do stuff with datareader
          updateResult.Success = Convert.ToBoolean(find.Parameters("@RESULT").Value)
    End Using

Вы читаете результат в операторе Using и, если что-то не получается, вы устанавливаете его в false ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...