1

SQL Server 2008 R2 に、カーソルを OUTPUT 値として返すストアド プロシージャがあります。.NET 4.0 フレームワークを使用して、このカーソルを C# アプリケーションに戻すことはできますか?

私のストアド プロシージャには、次の署名があります。

CREATE PROCEDURE [dbo].[MyProcedure]
      @nuserid    int,
      @nfetchtype int,
      @returncursor CURSOR VARYING OUTPUT
AS
...

私が持っているストアドプロシージャの最後に

...
    set @returncursor = CURSOR FORWARD_ONLY STATIC for SELECT * FROM MyTable WHERE          column=@Value
    open @returncursor
END

私の C# Web アプリケーションでは、System.Data.DbType を利用するラッパーを使用し、戻り値/パラメーターを DbType.Object として設定しています。データベースに対してクエリを実行すると、次のエラーが発生します。

オペランド型の衝突: sql_variant はカーソルと互換性がありません

この DbType.Object パラメーターは、Oracle の REFCURSOR で機能しますが、SqlServer で同じことを行う方法があるかどうかを知りたいです。私の目標は、まったく同じ署名を持つ SqlServer と Oracle の両方にストアド プロシージャを配置することです。

4

2 に答える 2

2

SQL では CURSOR パラメーターを使用できますが、ADO.NET では使用できません。代わりに、.NET では、IDbCommand.ExecuteReader() によって返される IDataReader を使用し、NextResult() を使用して結果セットを反復処理する必要があります。

于 2012-06-14T14:23:26.587 に答える
0

OLE DB、ODBC、ADO、DB-Library などのデータベース API でカーソルを使用することは想定されていません。

カーソルを使用する前に、この記事を読んでください。

于 2012-08-29T15:05:42.273 に答える