我想创建一个存储过程来返回许多其他存储过程中的记录计数。我有以下内容来创建一个字符串值:
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应用程序中执行存储过程时,我只从第一个存储过程中获取数据。
有人可以建议如何获得字符串值吗?
由于
詹姆斯
答案 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
在执行命令后,将允许您访问其他参数。