首頁 > 資料庫 > mysql教程 > 為什麼我的 C# 程式碼在從預存程序檢索回傳值時傳回空值?

為什麼我的 C# 程式碼在從預存程序檢索回傳值時傳回空值?

Patricia Arquette
發布: 2025-01-05 21:20:43
原創
345 人瀏覽過

Why is my C# code returning a null value when retrieving a return value from a stored procedure?

對C# 中的預存程序的回傳值檢索進行故障排除

嘗試從C# 中的預存程序擷取傳回值時,您可以遇到回傳值為空的問題。以下是問題的詳細說明和解決方案:

問題描述:

您定義了一個Transact-SQL 儲存過程,該過程採用兩個參數:@a作為輸入和@b 作為輸出。預存程序將 @b 設為查詢結果,並且您希望在 C# 程式碼中檢索 @b 的值。但是,當您執行預存程序並嘗試讀取返回值時,您會得到 null。

程式碼片段:

SqlConnection SqlConn = ...;
SqlCommand sqlcomm = new SqlCommand("Validate", SqlConn);
sqlcomm.CommandType = CommandType.StoredProcedure;
sqlcomm.Parameters.Add("...", SqlDbType.VarChar, ParameterDirection.Input);
SqlParameter retval = sqlcomm.Parameters.Add("...", SqlDbType.VarChar);
retval.Direction = ParameterDirection.ReturnValue;
sqlcomm.ExecuteNonQuery(); // MISSING
string retunvalue = (string)sqlcomm.Parameters["..."].Value;
登入後複製

邏輯錯誤:

C# 程式中缺少的程式碼是 ExecuteNonQuery 呼叫。執行預存程序會啟動資料庫查詢並更新輸出參數@b。如果沒有這個調用,預存程序將不會運行,並且返回值保持不變。

解決方案:

在檢索回傳值之前包含ExecuteNonQuery 方法:

sqlcomm.ExecuteNonQuery();
string retunvalue = (string)sqlcomm.Parameters["..."].Value;
登入後複製

進行此變更後,您的程式碼將正確擷取指派給儲存中的@b 的回傳值程式。

以上是為什麼我的 C# 程式碼在從預存程序檢索回傳值時傳回空值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板