Bri*_*ian 5 c# sql database stored-procedures
我已经看到了一些与此相似的问题,但没有一个完全相同.无论如何,我有一个以行结束的存储过程,
select SCOPE_IDENTITY()
return
Run Code Online (Sandbox Code Playgroud)
然后我通过电话获得价值executeScalar().这非常有效.但是,我觉得结束时更为正确return select SCOPE_IDENTITY()(而不是为此返回值创建新参数).这可能吗?
有三种方式,一般情况下做到这一点...你可以做你正在做的事情 - 一个选择 - 实际上返回单行,单柱结果集和出租ADO.Net拉动价值为你.要么
你可以使用return语句来返回值,(这种方法篡改了返回错误代码的返回值的常用用法模式)或者
您可以使用所谓的输出参数(有效传递存储过程的引用参数,它(的PROC)可以用一个值,那么这将是提供给ADO.net调用代码PROC返回后填充.. .
每个人都有advanteges和DIS-广告...我喜欢的第一个选项是最简单和最容易的代码...(这不是最perfomant)最好原因
在存储过程中使用输出参数的示例...
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
Run Code Online (Sandbox Code Playgroud)
当您从ADO.Net调用存储过程,而这个参数添加到参数采集...还有就是需要被称为ParameterDirection,可以采取ParameterDirection.InputOutput或ParameterDirection.Output值枚举的方法参数的重载, (其中包括)