0

(MySQL.Data v6.4.4.0を使用して)C#アプリケーションから呼び出しているMySQL(5.5)にストアドプロシージャがあります。

正常に動作する他のプロシージャがたくさんありますが、これは結果を返しません。データリーダーは結果セットが空であると言います。procは、トランザクション内で2つの挿入と更新を実行してから、返す2つのローカル変数を選択します。挿入と更新が行われていますが、選択が返されていません。

procを手動で実行すると、2つのフィールドを持つ単一の行が表示されますが、データリーダーは空です。

これは手順です:

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

回避策として-ストアド関数からスカラー値のみを取得する必要がある場合は、OUTパラメーターを使用して取得できます。

グレン、私はその理由を理解しようとしましたが、まさにこの方法で見つけました。実際には別のコンポーネントを使用していますが、GUIツール(dbForge Studioの無料エクスプレスバージョン)に複数の結果セットの結果が表示される場合があります。

于 2011-12-01T06:49:52.690 に答える