Процедура SQL не работает / очень медленно работает с командой SQL - PullRequest
2 голосов
/ 03 января 2012

У меня есть следующий сценарий:

Dim cmd as New SQLCommand
cmd.Connection = myopenconnection
cmd.CommandText = "usp_getdata"
cmd.Parameters.AddWithValue("@Year", 2008)
cmd.CommandType = StoredProcedure
Dim reader = cmd.ExecuteReader

Приложение застревает и продолжает ждать ответа, когда вышеизложенное оправдано.Я попытался выполнить команду SQL из студии SQL Management, и она отлично работает и на другой копии базы данных.

Ответы [ 2 ]

2 голосов
/ 03 января 2012

Выполнение хранимой процедуры без возврата данных

Вместо вызова SqlCommand.ExecuteReader(), вызовите SqlCommand.ExecuteNonQuery().

Согласно этой ссылке MSDN :

ExecuteReader

Выполняет команды, возвращающие строки.Для повышения производительности ExecuteReader вызывает команды, используя системную хранимую процедуру Transact-SQL sp_executesql.Следовательно, ExecuteReader может не дать желаемого эффекта, если он используется для выполнения команд, таких как инструкции Transact-SQL SET.

ExecuteNonQuery

Выполняет такие команды, как операторы Transact-SQL INSERT, DELETE, UPDATE и SET.

EDIT :

Выполнить хранимую процедуру для извлечения данных

Или, если вы пытаетесь вернуть скалярное значение, вы можете использовать SqlCommand.ExecuteScalar().Но если вы хотите получить данные, вам нужно использовать объект SqlDataReader, например:

Dim queryString As String = "usp_getdata"

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)
        command.CommandType = CommandType.StoredProcedure
        connection.Open()

        Dim reader As SqlDataReader = command.ExecuteReader()

        ' Call Read before accessing data.
        While reader.Read()
            Console.WriteLine(String.Format("{0}, {1}", _
                reader(0), reader(1)))
        End While

        ' Call Close when done reading.
        reader.Close()
    End Using

SqlDataReader Reference Class

0 голосов
/ 04 января 2012

Очень медленный / не рабочий код;

  Dim cmd As New SQLCommand
  cmd.Connection = myopenconnection
  cmd.CommandText = "usp_getdata"
  cmd.Parameters.AddWithValue("@Year", 2008)
  cmd.CommandType = StoredProcedure
  Dim reader = cmd.ExecuteReader

Проблема была решена путем изменения приведенного выше кода на;

 Dim cmd As New SQLCommand
 cmd.Connection = myopenconnection
 cmd.Parameters.AddWithValue("@Year", 2008)
 cmd.CommandText = "Exec usp_getdata @Year With Recompile"
 cmd.CommandType = Text
 Dim reader = cmd.ExecuteReader
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...