DataReader не возвращает результаты из сохраненного процесса MySQL
У меня есть сохраненный процесс в MySQL (5.5), который я вызываю из приложения C# (используя MySQL.Data v6.4.4.0).
У меня есть куча других процедур, которые работают нормально, но это не возвращает никаких результатов, считыватель данных говорит, что набор результатов пуст. Proc делает пару вставок и обновление внутри транзакции, затем выбирает 2 локальные переменные для возврата. Происходит вставка и обновление, но выбор не возвращается.
Когда я запускаю процесс вручную, он работает, выдает одну строку с двумя полями, но читатель данных пуст.
Это проц:
CREATE DEFINER=`root`@`localhost` PROCEDURE `File_UpdateFile`(IN siteId INT, IN fileId INT, IN description VARCHAR(100), IN folderId INT, IN fileSize INT, IN filePath VARCHAR(100), IN userId INT)
BEGIN
START TRANSACTION;
SELECT MAX(v.versionNumber) + 1 INTO @versionNumber
FROM `file_version` v
JOIN `file` f ON (v.fileId = f.fileId)
WHERE v.fileId = fileId AND f.siteId = siteId;
INSERT INTO `file_version` (fileId, versionNumber, description, fileSize, filePath, uploadedOn, uploadedBy, fileVersionState)
VALUES (fileId, @versionNumber, description, fileSize, filePath, NOW(), userId, 0);
INSERT INTO filehistory (fileId, `action`, userId, createdOn) VALUES (fileId, 'UPDATE', userId, NOW());
UPDATE `file` f SET f.checkedOutBy = NULL WHERE f.fileId = fileId;
COMMIT;
SELECT fileId, @versionNumber `versionNumber`;
END$$
Я вызываю процесс с помощью Dapper, но я отлажен в классе SqlMapper и вижу, что читатель ничего не возвращает.
1 ответ
В качестве обходного пути - если вам нужно извлечь только скалярное значение из хранимой функции, вы можете сделать это через параметры OUT.
Гленн, я попытался понять причину и нашел именно так. На самом деле мы используем другие компоненты, вы можете увидеть результат множественного набора результатов в нашем инструменте с графическим интерфейсом (бесплатная экспресс-версия dbForge Studio).