1

我在 SQL Server 2008 R2 中有一个存储过程,它返回一个 Cursor 作为 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 回答