Возвращаемое значение хранимой процедуры в petapoco всегда возвращает -1 (не выходной параметр) - PullRequest
0 голосов
/ 20 января 2012

Я пытаюсь что-то вроде:

            using (var db = new Database(ConnectionString, DataProvider))
            {
                var spResult =
                    db.Execute("exec [cmtUpdateOrganization] @Id,@FullName",
                               new
                                   {
                                       organizatonData.Id,
                                       organizatonData.FullName
                                   }
                        );
                if (spResult == 0 || spResult == 1)
                    return true;
                return false;
            }

Но кажется, что spResult всегда равен -1.

Хотя в хранимой процедуре он определенно возвращает 0. Я проверен с помощьюте же параметры на самом сервере sql.

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

Ответы [ 2 ]

3 голосов
/ 21 января 2012

Метод Execute в PetaPoco просто вызывает метод ExecuteNonQuery () из объекта SqlCommand.

Вот причина, по которой вы возвращаете -1, что происходит непосредственно от MSDN .

Цитируется по MSDN

Вы можете использовать ExecuteNonQuery для выполнения операций каталога (для Например, запрос структуры базы данных или создание базы данных объекты, такие как таблицы), или изменить данные в базе данных без использование DataSet путем выполнения операторов UPDATE, INSERT или DELETE.

Хотя ExecuteNonQuery не возвращает строк, любые выходные параметры или возвращаемые значения, сопоставленные с параметрами, заполняются данными.

Для операторов UPDATE, INSERT и DELETE возвращаемым значением является количество строк, затронутых командой. Когда триггер существует на таблица вставляется или обновляется, возвращаемое значение включает число строк, затронутых как операцией вставки или обновления, так и числом строк, затронутых триггером или триггерами. Для всех других типов заявления, возвращаемое значение -1 . Если происходит откат, возврат значение также -1. ​​

1 голос
/ 22 февраля 2012

Я не знаю, как выглядит ваш прок. Однако, если он выполняет вставку (правильно), он должен вернуть 1. В противном случае он вернет -1;

Вот мой код для тестирования этого:

SQL PROC и TABLE

CREATE TABLE test(id INT, name VARCHAR(50), InsertDate DATETIME)

CREATE proc cmtUpdateOrganization (@id int, @FullName varchar(50))
AS
BEGIN
    IF NOT EXISTS(Select id from Test where Id = @id)
    BEGIN
        INSERT test(id,Name, InsertDate)values(@id, @FullName, GETDATE());
    END
END
GO

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

CODE

    try {
        string sql = "exec cmtUpdateOrganization @Id, @FullName";
        using (var db = new DB()) {
            db.EnableAutoSelect = false;
            var result = db.Execute(sql, new { Id = 1, FullName = "Name" });
            Console.WriteLine(string.Format("Your result is {0}", result));
        }

    } catch ( Exception ex) {
        Console.WriteLine(ex.Message.ToString());
    }
...