首页 >后端开发 >C++ >如何从 C# 中的 SQL Server 存储过程检索输出参数,包括 SCOPE_IDENTITY()?

如何从 C# 中的 SQL Server 存储过程检索输出参数,包括 SCOPE_IDENTITY()?

Patricia Arquette
Patricia Arquette原创
2025-01-10 09:11:41576浏览

How Can I Retrieve Output Parameters, Including SCOPE_IDENTITY(), from SQL Server Stored Procedures in C#?

从 C# 应用程序中的 SQL Server 存储过程访问输出参数

挑战

在 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# 实现

下面的 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() 用法: 确保在存储过程中正确使用 SCOPE_IDENTITY() 来检索最后插入的标识值。
  • 参数配置: 仔细检查 SqlParameter 对象 (pvNewId) 是否正确添加到 SqlCommand 对象 (cmd) 及其属性 (ParameterName, DbTypeDirection)已准确设置。

通过解决这些问题,您可以从 C# 应用程序内的 SQL Server 存储过程中有效地检索输出参数,包括由 SCOPE_IDENTITY() 生成的参数。

以上是如何从 C# 中的 SQL Server 存储过程检索输出参数,包括 SCOPE_IDENTITY()?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn