【问题标题】:DataReader is not returning results from a MySQL Stored ProcDataReader 未从 MySQL 存储过程返回结果
【发布时间】:2012-01-09 08:23:12
【问题描述】:

我在 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 类,我可以看到阅读器没有返回任何内容。

【问题讨论】:

  • 只是一个猜测(抱歉,我手边没有 MySql 实例),但 DataReader 中是否有多个可用的结果集?如果您拨打reader.NextResult() 两次然后尝试拨打Read() 会发生什么?
  • 作为一种解决方法 - 如果您只需要从存储的函数中检索一个标量值,您可以通过 OUT 参数来完成。
  • @Devart 发帖作为答案,它奏效了!

标签: c# mysql datareader mysql.data


【解决方案1】:

作为一种解决方法 - 如果您只需要从存储的函数中检索一个标量值,您可以通过 OUT 参数来完成。

格伦,我试图理解原因,结果就是这样。 实际上我们使用了其他组件,您可能会在我们的 GUI 工具(dbForge Studio 的免费快速版)中看到多个结果集的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2013-08-14
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多