首頁 >後端開發 >C++ >如何從 C# 中的 SQL Server 預存程序擷取輸出參數,包括 SCOPE_IDENTITY()?

如何從 C# 中的 SQL Server 預存程序擷取輸出參數,包括 SCOPE_IDENTITY()?

Patricia Arquette
Patricia Arquette原創
2025-01-10 09:11:41543瀏覽

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