我使用下面的查询来获取另一个数据的OUTPUT子句值。
@PageIndex bigint=1,
@PageSize bigint=5,
@RecordCount bigint=0 OUTPUT,
Select ROW_NUMBER() OVER (ORDER BY EmpId ASC) AS RowNumber,
EmpId,
(Salutation + ' ' + FirstName + ' ' + LastName) as Name,
Specialties,
EmpPhoto
INTO #Results
from tblEmployee
Where EmpType='Doctor'
Select @RecordCount = COUNT(*) from #Results
Select *
from #Results
Where RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1
AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1
DROP TABLE #Results
现在,我希望@RecordCount
值与另一个Select
查询数据相关联。如何在C#中获取它?我正在使用3层架构,因此我创建了具有DataTable
数据类型的方法。那么,我需要做些什么改变?
答案 0 :(得分:1)
// 1. Create the output parameter
var p = new SqlParameter("RecordCount", 0) { Direction = ParameterDirection.Output };
// 2. Make the SQL call
using (var con = new SqlConnection(connString))
using (var cmd = con.CreateCommand())
{
cmd.Parameters.Add(p);
using (var reader = cmd.ExecuteReader())
{
// Retrieve reader values from query
}
}
// 3. Retrieve the value of the output parameter
var recordCount = (long)p;
另一种选择是重构SQL并执行
RETURN @@ROWCOUNT
可以使用以下内容在C#中检索(请注意,返回值仅限于int
类型)
cmd.Parameters["@RETURN_VALUE"]
另外,避免像这样使用TempDb。这是不必要的。使用内置SQL分页
,更好的页面方式就是这样SELECT ...
FROM ...
WHERE ...
ORDER BY ...
OFFSET (@PageIndex - 1) * @PageSize ROWS
FETCH NEXT @PageSize ROWS ONLY
答案 1 :(得分:0)
由于您没有显示您的c#代码 - 很难说您应该做什么更改。
但基本上 - 您无法在脚本中使用output
关键字。它应该是存储过程的输出参数 - 所以你必须将你的逻辑包装到存储过程中并从c#代码中调用它。
在这种情况下,您应该使用ParameterDirection.Output
向SqlCommand添加参数。执行命令后,您可以从SqlParameter.Value
属性中获取参数的返回值。