MS SQL Server 2008 показывает значение, переданное хранимой процедуре, но VB.NET говорит, что это не так - PullRequest
0 голосов
/ 26 июня 2018

Простой сценарий: через VB.NET я вызываю хранимую процедуру следующим образом:

Public Shared Function NameToCallStoredProcedure(ByVal Interkey As Integer) As DataSet
        Dim db As Database = DatabaseFactory.CreateDatabase()        
        Dim sqlCommand As String = "dbo.myStoredProcedureName"
        Dim DbCommandObject As DbCommand = db.GetSqlStringCommand(sqlCommand)
        db.AddInParameter(DbCommandObject, "InterKey", DbType.Int64, Interkey)
        Return db.ExecuteDataSet(DbCommandObject)
End Function

Вот вся хранимая процедура:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[myStoredProcedureName]
    @InterKey INT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @Err INT

    SELECT 
        mfg.FuncID, 
        mi.SenderID, mi.ReceiverID, 
        mfg.GroupKey,
        mi.InterDate, mi.ControlNo, mi.InterTime 
    FROM 
        table1 mfg, table2 mi 
    WHERE 
        mfg.Interkey = mi.Interkey 
        AND mfg.Interkey = @InterKey

    SET @Err = @@Error

    RETURN @Err
END

Когда мой код VB вызываетВ хранимой процедуре я получаю сообщение об ошибке:

System.Data.SqlClient.SqlException: «Процедура или функция« myStoredProcedure »ожидает параметр« @InterKey », который не был предоставлен. '

Я трижды проверил, что имена переменных правильные.Я использовал SQL Server Profiler, и он даже говорит, что при вызове хранимой процедуры переменная с именем «InterKey» передается со значением 1. Я в своем уме.ПОЖАЛУЙСТА, кто-нибудь, помогите мне.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Сотрудник помог мне понять, в чем проблема.При вызове моей хранимой процедуры у меня было db.GetSqlStringCommand, и это должно было быть db.GetStoredProcCommand.Спасибо всем, кто предложил помощь.

0 голосов
/ 26 июня 2018

В этой строке кода

db.AddInParameter(DbCommandObject, "InterKey", DbType.Int64, Interkey)

Во-первых, попробуйте «@InterKey» вместо «InterKey» Во-вторых, я думаю, что INT в SQL Server - это Int32 в .Net.Ваш DbType может вызвать сужающее преобразование, которое не разрешено сервером.

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