我有一个存储过程,列出从
@index
开始的项目并返回下一个 @length
项目。此外,@available
Output
参数返回集合中项目的计数。
CREATE PROCEDURE dbo.List
@index int = 0,
@lenth int = 10,
@available int OUTPUT
AS
BEGIN
SELECT * FROM dbo.table1 WHERE ...;
available = (SELECT COUNT(*) FROM dbo.table1);
END
table1
包含 12 行。
我使用
System.Data.SqlClient
运行一些 .NET 代码 (C#) 来获取数据:
await using var connection = new SqlConnection("Server=...");
await connection.OpenAsync();
await using var command = new SqlCommand("dbo.List", connection) { CommandType = CommandType.StoredProcedure };
command.Parameters.Add(new SqlParameter("index", SqlDbType.Int) { Value = 0 });
command.Parameters.Add(new SqlParameter("length", SqlDbType.Int) { Value = 3 });
var outParam = new SqlParameter("AvailableItems", SqlDbType.Int) { Direction = ParameterDirection.Output };
command.Parameters.Add(outParam);
await using var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
Console.WriteLine(reader["Name"]);
}
Console.WriteLine("Available items: " + outParam.Value + " rows");
这会输出类似的内容
Joe
Anne
Raj
Available items: rows
由于某种原因,
outParam.Value
返回null
,而预期结果是12。
有人了解这里发生了什么吗?我的“行数”去哪儿了?
传递给
SqlParameter
ctor 的参数名称应与存储过程匹配,尝试将代码更改为:
var outParam = new SqlParameter("available", SqlDbType.Int)
{
Direction = ParameterDirection.Output
};