У вас есть ошибка в вашем синтаксисе SQL, MySQL коннектор для .net - PullRequest
0 голосов
/ 18 мая 2018

Процедура хранения:

CREATE DEFINER=`newdb`@`%` PROCEDURE `GetMaximumIDsCount`(IN AppID INT,IN isBurnCenter INT,IN BurnCenterID INT)
BEGIN

    IF isBurnCenter = 1 THEN

    SELECT MAX(CAST(b.hospitalid AS SIGNED))

    FROM tblhosipital b

    WHERE b.appId = AppID AND b.burncenterid IS NULL;

    END IF;


    IF isBurnCenter = 0 THEN

    SELECT MAX(CAST(h.hospitalid AS SIGNED))

    FROM tblhosipital h

    WHERE h.appId = AppID AND h.burncenterid <> '' AND h.burncenterid = BurnCenterID;

    END IF;
END

Вызов из ApplicationDbContext (сначала код)

public virtual ObjectResult<long?> GetMaximumIDsCount2(Nullable<int> appID, Nullable<int> isBurnCenter, Nullable<int> burnCenterID)
        {
            var appIDParameter = appID.HasValue ?
                new ObjectParameter("AppID", appID) :
                new ObjectParameter("AppID", typeof(int));

            var isBurnCenterParameter = isBurnCenter.HasValue ?
                new ObjectParameter("isBurnCenter", isBurnCenter) :
                new ObjectParameter("isBurnCenter", typeof(int));

            var burnCenterIDParameter = burnCenterID.HasValue ?
                new ObjectParameter("BurnCenterID", burnCenterID) :
                new ObjectParameter("BurnCenterID", typeof(int));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<Nullable<long>>("GetMaximumIDsCount @AppID, @isBurnCenter, @BurnCenterID", appIDParameter, isBurnCenterParameter, burnCenterIDParameter);
        }

Исключение получения:

В вашем SQL-файле возникла ошибкасинтаксис;проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MySQL, рядом с GetMaximumIDsCount @AppID, @isBurnCenter, @BurnCenterID 'в строке 1

1 Ответ

0 голосов
/ 18 мая 2018

Вам необходимо добавить CALL [procedure_name]() метод перед именем хранимой процедуры:

return ((IObjectContextAdapter)this)
       .ObjectContext
       .ExecuteStoreQuery<List<long?>>("CALL GetMaximumIDsCount(@AppID, @isBurnCenter, @BurnCenterID)", 
       appIDParameter, isBurnCenterParameter, burnCenterIDParameter);

Примечание: Хранимая процедура MySQL выполняется с этим синтаксисом:

CALL procedure_name(parameter_list)

Примечание 2: Используйте FirstOrDefault() или SingleOrDefault(), чтобы получить ровно один набор результатов из ObjectResult<T>:

var x = db.GetMaximumIDsCount2(...).FirstOrDefault();

В качестве примечания можно попробовать объявить параметры с помощью MySqlParameter вместо ObjectParameter:

// you can change DBNull.Value with any appropriate value

var appIDParameter = new MySqlParameter("AppID", MySqlDbType.Int).Value = (appID.HasValue) ? appID : DBNull.Value;

var isBurnCenterParameter = new MySqlParameter("isBurnCenter", MySqlDbType.Int).Value = (isBurnCenter.HasValue) ? isBurnCenter : DBNull.Value;

var isBurnCenterParameter = new MySqlParameter("BurnCenterID", MySqlDbType.Int).Value = (burnCenterID.HasValue) ? burnCenterID : DBNull.Value;

Ссылка:

Синтаксис CALL (MySQL)

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