我已经看到了一些与此相似的问题,但没有一个完全相同.无论如何,我有一个以行结束的存储过程,
select SCOPE_IDENTITY() return
然后我通过电话获得价值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
当您从ADO.Net调用存储过程,而这个参数添加到参数采集...还有就是需要被称为ParameterDirection,可以采取ParameterDirection.InputOutput或ParameterDirection.Output值枚举的方法参数的重载, (其中包括)