在 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中文網其他相關文章!