C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: ASPでストアドプロシージャの戻り値の型が取得できない


(過去ログ 96 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■57292 / inTopicNo.1)  ASPでストアドプロシージャの戻り値の型が取得できない
  
□投稿者/ TAMA (16回)-(2011/02/21(Mon) 17:25:28)

分類:[.NET 全般] 

いつもお世話になっております。
困ったことがあり質問させていただきます。

■環境■
IIS7.0
SQLServer2008R2
ASP.NET
C#
VisualWebDeveloper2010

■問題■
SQLServerで戻り値のあるストアドプロシージャを作成し、
ASP側でDataClasses.dbmlにそのストアドプロシージャを
ドラッグ&ドロップで追加すると以下の表示がされ、
引数が違うという事象で実質的にストアドプロシージャが
使用できません。

「次のストアドプロシージャの戻り値の型を検出できませんでした。
プロパティウィンドウで、それぞれのストアドプロシージャの
戻り値の型を設定して下さい。」

※プロパティウィンドウで手動で戻り値を設定することは可能でしたが、
実際にソースの中でこのストアドプロシージャを使用する時に
引数が違うという問題でストアドプロシージャは使用できませんでした。

■調査結果■
試行錯誤してみた結果、ストアドプロシージャの中で
カーソルを使用している部分をコメントアウトすると
問題は発生しませんでした。
しかしながら、カーソルで処理をする必要があるため、
カーソルを使用しつつ上記問題を回避する方法を探しています。

■参考情報(ソース)■
ALTER PROCEDURE [dbo].[SP_インデックス取得]
@SQL VARCHAR(50),
@KEY VARCHAR(50),
@VALUE VARCHAR(100),
@INDEX INT OUTPUT
AS
BEGIN
----@SQL(SELECT文)の結果で@KEY(列名)の内、@VALUE(値)が何番目に来るかを返す
SET NOCOUNT ON;

DECLARE @COUNTER INT
SET @COUNTER = 0;

----インデックス取得対象分ループ
EXECUTE('DECLARE CUR_インデックス取得対象 CURSOR FOR ' + @SQL)
OPEN CUR_インデックス取得対象
FETCH NEXT FROM CUR_インデックス取得対象 INTO @KEY
WHILE (@@fetch_status = 0)
BEGIN
SET @COUNTER = @COUNTER + 1
IF @KEY = @VALUE
BEGIN
SET @INDEX = @COUNTER
----カーソルを閉じる
CLOSE CUR_インデックス取得対象
DEALLOCATE CUR_インデックス取得対象
RETURN (0)
END

--FETCH(行の取り出し)
FETCH NEXT FROM CUR_インデックス取得対象 INTO @KEY
END

----カーソルを閉じる
CLOSE CUR_インデックス取得対象
DEALLOCATE CUR_インデックス取得対象

----ヒットしなかったら0を返す
SET @INDEX = 0
RETURN (0)
END
引用返信 編集キー/
■57392 / inTopicNo.2)  Re[1]: ASPでストアドプロシージャの戻り値の型が取得できない
□投稿者/ TAMA (17回)-(2011/02/24(Thu) 18:25:31)
自己解決しました。

カーソルで以下の記述だとエラーが発生するようです。

EXECUTE('DECLARE CUR_インデックス取得対象 CURSOR FOR ' + @SQL)

以下の記述に修正するとエラーは発生しませんでした。

DECLARE @実行SQL文 VARCHAR(300)
SET @実行SQL文 = 'DECLARE CUR_インデックス取得対象 CURSOR FOR ' + @SQL;
EXECUTE(@実行SQL文)

さらにASP側で引数不正でストアドプロシージャを使用できないのは、
また別の問題でした。

お騒がせして申し訳ありませんでした。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -