2011-11-30 58 views
0

我有一个存储过程在MySQL(5.5),我从C#应用程序调用(使用MySQL.Data v6.4.4.0)。DataReader没有返回MySQL存储过程的结果

我有一堆可以正常工作的其他特效,但是这不会返回任何结果,数据读取器说结果集是空的。 proc在事务内执行一些插入&更新,然后选择2个局部变量返回。插入&更新正在发生,但选择未返回。

当我手动运行proc时,它会使用两个字段的单行,但数据读取器是空的。

这是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$$ 

我打电话用短小精悍的PROC,但我已经调试到SqlMapper类,我可以看到,读者不返回任何东西。

+1

只是一个猜测(对不起,我没有一个MySql实例),但DataReader中有多个结果集可用吗?如果你调用'reader.NextResult()'两次然后尝试'Read()'会发生什么? – rsbarro

+0

'NextResult'返回错误 –

+1

作为一种解决方法 - 如果您需要从存储函数中检索标量值,则可以通过OUT参数执行此操作。 – Devart

回答

1

作为一种解决方法 - 如果您需要从存储函数中检索标量值,则可以通过OUT参数执行此操作。

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

+0

谢谢,我会检查出来。 –