2011-11-30 9 views
0

C# 응용 프로그램 (MySQL.Data v6.4.4.0 사용)에서 호출하는 MySQL (5.5)에 저장된 proc 파일이 있습니다.DataReader가 MySQL 저장 프로 시저의 결과를 반환하지 않습니다.

다른 procs도 잘 작동하지만 결과가 반환되지 않습니다. 데이터 판독기는 결과 집합이 비어 있다고 말합니다. 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$$ 

내가 말끔 사용 시저를 호출하고있어,하지만 난 SqlMapper 클래스로 디버깅 봤는데, 독자가 아무것도 반환하지 않습니다 것을 볼 수 있습니다.

+1

미안하지만 (MySql 인스턴스가 유용하지 않음) 미안하지만 DataReader에서 여러 결과 세트를 사용할 수 있습니까? 'reader.NextResult()'를 두 번 호출하고'Read()'를 시도하면 어떻게됩니까? – rsbarro

+0

'NextResult'가 false를 반환합니다. –

+1

해결 방법 - 저장된 함수에서 스칼라 값만 검색해야하는 경우 OUT 매개 변수를 통해 수행 할 수 있습니다. – Devart

답변

1

해결 방법 - 저장된 함수에서 스칼라 값만 검색해야하는 경우 OUT 매개 변수를 통해 수행 할 수 있습니다.

글렌, 나는 이유를 이해하려고 애썼지 만 이런 식으로 발견했습니다. 실제로 우리는 다른 구성 요소를 사용합니다. 우리 GUI 도구 (dbForge Studio 무료 표현 버전)에서 여러 결과 세트의 결과를 볼 수 있습니다.

+0

감사합니다. 나는 그것을 조사 할 것이다. –