在 C# 中从 SQL Server 存储过程成功检索输出参数值,特别是使用 SCOPE_IDENTITY()
主键可能很棘手。 本文解决了常见的困难并提供了实用的解决方案。
usp_InsertContract
存储过程演示了该过程。它将一条记录插入到 Contracts
表中,并通过 Id
输出参数返回新生成的主键(@NewId
列)。 更新后的过程使用 SCOPE_IDENTITY()
进行准确的主键检索:
<code class="language-sql">CREATE PROCEDURE usp_InsertContract @ContractNumber varchar(7), @NewId int OUTPUT AS BEGIN INSERT INTO [dbo].[Contracts] (ContractNumber) VALUES (@ContractNumber); SELECT @NewId = SCOPE_IDENTITY(); END;</code>
下面的 C# 代码片段展示了如何处理输出参数:
<code class="language-csharp">SqlParameter pvNewId = new SqlParameter(); pvNewId.ParameterName = "@NewId"; pvNewId.DbType = DbType.Int32; pvNewId.Direction = ParameterDirection.Output; // ... (Add pvNewId to the SqlCommand object 'cmd') ... // Execute the stored procedure cmd.ExecuteNonQuery(); // Retrieve the output value int contractID = Convert.ToInt32(cmd.Parameters["@NewId"].Value);</code>
如果您遇到问题,请验证以下内容:
Contracts
表包含标识列(自动递增主键)。SCOPE_IDENTITY()
来检索最后插入的标识值。SqlParameter
对象 (pvNewId
) 是否正确添加到 SqlCommand
对象 (cmd
) 及其属性 (ParameterName
, DbType
、Direction
)已准确设置。通过解决这些问题,您可以从 C# 应用程序内的 SQL Server 存储过程中有效地检索输出参数,包括由 SCOPE_IDENTITY()
生成的参数。
以上是如何从 C# 中的 SQL Server 存储过程检索输出参数,包括 SCOPE_IDENTITY()?的详细内容。更多信息请关注PHP中文网其他相关文章!