4

以下のようなストアド プロシージャを作成しました (この短縮バージョンを使用して、問題を解決しようとしています)。

CREATE PROCEDURE bsp_testStoredProc
AS
BEGIN

CREATE TABLE #tmpFiles  
(
    AuthorName NVARCHAR(50), 
    PercentageHigh INT
) 

-- Insert data into temp table

SELECT AuthorName, PercentageHigh FROM #tmpFiles 
ORDER BY PercentageHigh DESC

DROP TABLE #tmpFiles

RETURN 0
END

VS2008 の C# コードから、クエリ コンポーネントを[既存のストアド プロシージャを使用] オプションで使用して、これを DataTable / DataGridView に接続して結果を表示しようとしています。

ただし、一時テーブルから選択しているため、Query コンポーネントのプロパティで、Visual Studio はストアド プロシージャから返される列を表示しません。SP は実際のスキーマに基づいていないため、使用されているデータ型を判断するのに問題があると思います。

実際のテーブルから選択するさまざまなストアド プロシージャに接続すると、列が正しく表示されます。

誰かがこれについて知っていますか?どのような種類のデータが返されるかを明示的に述べるためにどこかに追加できるヒントはありますか?

前もって感謝します。

4

1 に答える 1

1

情報については、一時テーブルではなく「テーブル変数」(つまり、#FOO ではなく @FOO) を使用することを検討してください。

一時テーブルでは、SP スキーマを明示的に宣言する方法はありません。ラッパー クラスを生成するときに、SP の簡略化されたバージョンを使用することをお勧めします。つまり、正しい形状の単純な SELECT を実行します。

または、明示的なスキーマを持つUDF を使用するために LINQ を使用します。

于 2008-10-15T10:03:23.990 に答える