从存储过程返回一个字符串值

时间:2014-08-27 00:41:14

标签: sql asp.net sql-server tsql stored-procedures

我想创建一个存储过程来返回许多其他存储过程中的记录计数。我有以下内容来创建一个字符串值:

ALTER PROCEDURE usp_Prepare_Default_Page 
    @Status int,
    @CurrentUser int,
    @DisplayUser int,
    @OwnRecords BIT = 0,
    @array VARCHAR(MAX) = '' OUTPUT
AS
BEGIN
    DECLARE @dgActions INT = 0
    DECLARE @dgAllocByMe INT = 0
    DECLARE @dgCompliance INT = 0

     EXEC uSp_myTask_CurrentTasks @Status, @CurrentUser, @DisplayUser, @OwnRecords
     SET @dgActions = @@rowcount

     EXEC uSp_myTask_ComplianceProcess @Status, @CurrentUser, @DisplayUser, @OwnRecords
     SET @dgCompliance = @@rowcount
     SET @array = CAST(@dgActions AS VARCHAR(10)) + ',' + CAST(@dgAllocByMe AS VARCHAR(10)) + ',' + CAST(@dgCompliance AS VARCHAR(10))

     select @array AS tabDataCounts
END
GO

在SQL Server Management Studio中执行此操作时,将显示每个已执行的存储过程以及我的字符串值。

当我在ASP.Net应用程序中执行存储过程时,我只从第一个存储过程中获取数据。

有人可以建议如何获得字符串值吗?

由于

詹姆斯

1 个答案:

答案 0 :(得分:0)

@array变量看起来很棒。一切都运行良好。触发SQL查询,完成数据库操作。那么输出在哪里?

为了抓住ASP.net方面的数据,你需要做一些事情

1)声明一个输出变量来捕获你的sproc返回的值。

SQLParameter array = new SQLParameter();
array.ParameterName = "@array";
array.Direction = ParameterDirection.Output;
array.DBType = DbType.Text;

2)好的,现在array变量将捕获该值。现在您的查询如何了解它?您必须将其添加到发送到查询的参数中。

SqlCommand command = new SqlCommand("your command", "your connection");
command.Parameters.Add(array);

3)好了,现在你的命令可以访问参数并将@array的值保存到数组变量中。实际上如何获取C#代码来访问它?

string returnedValue = string.empty
returnedValue = command.ExecuteNonQuery();

最后两行可能因许多因素而异。但假设您的@array值是一个字符串而您正在执行非查询,这将起作用。如果您对这些行有任何疑问,请询问。

现在,returnedValue将包含您的输出参数。

4)如果您的存储过程有多个返回值,该怎么办?

command.Parameters["@array"].Value
command.Parameters["some other parameter"].Value
command.Parameters["another parameter"].Value
在执行命令后,

将允许您访问其他参数。