我在SQL Server 2008 R2中有一个存储过程,它返回一个Cursor作为OUTPUT值。是否可以使用.NET 4.0框架将此Cursor返回到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中存储具有完全相同签名的存储过程。
答案 0 :(得分:2)
您可以在SQL中使用CURSOR参数,但ADO.NET无法使用它。相反,在.NET中,您必须使用IDbCommand.ExecuteReader()返回的IDataReader,并使用NextResult()迭代结果集。
答案 1 :(得分:0)
您不应该在数据库API中使用游标,例如OLE DB,ODBC,ADO和DB-Library等。
在使用光标之前请先浏览this article。