0

我在 MySQL (5.5) 中有一个存储过程,我从 C# 应用程序调用(使用 MySQL.Data v6.4.4.0)。

我有一堆其他可以正常工作的过程,但这没有返回任何结果,数据读取器说结果集是空的。proc 在事务中进行了几次插入和更新,然后选择 2 个局部变量返回。插入和更新正在发生,但选择没有返回。

当我手动运行 proc 时,它会工作,给出一个包含两个字段的单行,但数据读取器是空的。

这是过程:

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 调用 proc,但我已经调试到 SqlMapper 类,我可以看到阅读器没有返回任何内容。

4

1 回答 1

1

As a workaround - if you need to retrieve just a scalar value from a stored function, you can do it through the OUT parameters.

Glenn, I tried to understand the reason and found just this way. Actually we use another components, you may see the result of multiple result-set in our GUI tool (free express version of dbForge Studio).

于 2011-12-01T06:49:52.690 回答