Вызов хранимой процедуры с параметрами в функции Azure выдает ошибку - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь написать функцию Azure в C #, которая вызывает хранимую процедуру SQL Azure с параметром, но выдает ошибку ...

Исключительная ситуация при выполнении функции: Functions.EventHubRaw. mscorlib: Исключение было сгенерировано целью вызова. Поставщик данных .Net SqlClient: Процедура или функция 'FaultDetails' ожидает параметр '@FaultID', который не был предоставлен.

Чего мне не хватает?

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

Вот фрагмент кода из функции Azure ...

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@FaultID", SqlDbType.Int);
cmd.Parameters["@FaultID"].Value = faultID;
// cmd.Parameters.AddWithValue("@FaultID", faultID);
// cmd.Parameters.Add(new SqlParameter("@FaultID", SqlDbType.NVarChar)).Value = faultID;
var reader = cmd.ExecuteReader();

А вот и хранимая процедура ...

ALTER PROCEDURE [dbo].[FaultDetails]
(
    @FaultID int
)
AS
BEGIN
    SET NOCOUNT ON

SELECT        Fault.FaultID, Fault.ErrCode, Fault.StatusID, Status.DeviceID, Status.Counter, Status.LMU34Telegram, Status.EventProcessedUtcTime, Status.GenTime, Device.Description, Device.ModelNumber, Device.SerialNumber, 
                         Device.Latitude, Device.Longitude, Agent.Name, Agent.Email, Agent.Telephone
FROM            Fault INNER JOIN
                         Status ON Fault.StatusID = Status.StatusID INNER JOIN
                         Device ON Status.DeviceID = Device.DeviceID INNER JOIN
                         Agent ON Device.AgentID = Agent.AgentID
WHERE        (Fault.FaultID = @FaultID)

END

Довольно простые вещи, нет?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Мы не знаем, какая у вас faultID переменная. Но faultId должен иметь тип данных Int. Azure предоставляет наш образец о command.Parameters.Add() метод:

public void AddSqlParameter(SqlCommand command) 
{
    SqlParameter param = command.Parameters.Add(
        "@Description", SqlDbType.NVarChar);
    param.Size = 16;
    param.Value = "Beverages";
} 

Для более подробной информации, вы можете увидеть здесь .

Я думаю, что вы можете попытаться изменить свой код следующим образом и повторить попытку:

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter(@FaultID", SqlDbType.Int));  
cmd.Parameters["@FaultID"].Value = 1;
var reader = cmd.ExecuteReader();

Надеюсь, это поможет вам.

0 голосов
/ 14 января 2019

Я думаю, вам не хватает направления параметра ...

cmd.Parameters.Add(new SqlParameter("@FaultID", SqlDbType.Int)
                {
                    Direction = ParameterDirection.Input,
                    Value = faultID
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...