Использование хранимой процедуры SQL Server не удается в VB.NET - PullRequest
0 голосов
/ 03 февраля 2019

Борьба за доступ к хранимой процедуре SQL Server из VB.net:

DECLARE @R INT
DECLARE @trm VARCHAR(255)
SET @trm = 'PartNumber'

EXECUTE @R = [dbo].[usp_CannedGlobalSearch] @trm

Этот оператор SQL возвращает 12 столбцов в SQL Server Management Studio.Отлично работает.

Dim StoredConn As OdbcConnection = New OdbcConnection(SQLRdrConnectString)
Dim StoredCommand As New OdbcCommand
("CALL usp_CannedGlobalSearch (?)", StoredConn)
StoredCommand.CommandType = CommandType.StoredProcedure
StoredCommand.CommandText = "{? = CALL usp_CannedGlobalSearch(?)}"
StoredCommand.Parameters.Add("@RC", OdbcType.Int)  'this is the result
StoredCommand.Parameters.Add("@trm", OdbcType.VarChar)   'sending a search string
StoredCommand.Parameters("@term").Value = "PartNumber"
StoredConn.Open()
Dim TestInt As Integer = StoredCommand.ExecuteNonQuery()

Результаты выполнения:

ОШИБКА [HY105] [Microsoft] [Драйвер ODBC SQL Server] Неверный тип параметра.

1 Ответ

0 голосов
/ 03 февраля 2019

Вот как вы бы вызывали хранимую процедуру в SQL Server из VB.NET с показанным вами параметром:

Dim testInt As Integer = -1

Using conn As New SqlConnection(SQLRdrConnectString)
    Using cmd As New SqlCommand("usp_CannedGlobalSearch", conn)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.Parameters.Add(New SqlParameter With {
                           .ParameterName = "@trm",
                           .SqlDbType = SqlDbType.VarChar,
                           .Size = 255,
                           .Value = "PartNumber"})

        conn.Open()
        Dim res As Object = cmd.ExecuteScalar()
        If res IsNot Nothing Then
            testInt = Convert.ToInt32(res)
        End If

    End Using
End Using

Часть с Dim res As Object... должна вообще ничего не возвращать,даже NULL и значение testInt будет равно -1, так что вы можете проверить это.Если хранимая процедура всегда возвращает целое число, ее можно заменить одной строкой:

testInt = Convert.ToInt32(cmd.ExecuteScalar())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...