2011-11-30 95 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

謝謝,我會檢查出來。 –