一般来说,有三种方法可以做到这一点...您可以做您正在做的事情 - 使用 Select - 实际上返回单行、单列结果集并让 ADO.Net 提取值你。或者
您可以使用return语句返回值,(这种方法篡改了返回错误代码的返回值的常见用法模式)或
您可以使用所谓的 OutPut 参数,(有效地将存储的 proc 传递给一个参数的引用,它(proc)可以填充一个值,然后在 proc 之后 ADO.net 调用代码可以使用该值返回...
每个都有优点和缺点...我最喜欢第一个选项,因为它是最简单和最容易编码的...(它不是最高效的)
在存储过程中使用输出参数的例子...
Create Procedure MyProc
@Name varchar(20),
@DOB DateTime,
@EmployeeId Integer Output = Null
As
Set NoCount On
If @EmployeeId Is Null
Begin
Insert Employees(Name, DateofBirth)
Values (@Name, @DOB)
Set @EmployeeId = Scope_Identity()
End
Else If Exists(Select * From Employees
Where EmployeeId =@EmployeeId)
Begin
Update Employees Set
Name = Isnull(@Name, Name),
DateOfBirth = IsNull(@DOB, DateOfBirth)
Where EmployeeId = @EmployeeId
End
Else
Raiserror('EmployeeId %d is missing or has been deleted.',
16, 1, @EmployeeId)
Return 0
当您从 ADO.Net 调用存储过程并将此参数添加到参数集合中时...有一个重载,它采用一个方法参数,该参数是一个名为 ParameterDirection 的枚举,它可以采用 ParameterDirection.InputOutput 或 ParameterDirection 的值.输出,(除其他外)