我調用 astored procedure并且它有一個int返回值。但是,將值返回到我的后端時出現錯誤。public async Task<string> CreatePortfolio(Portfolio portfolio){ string statusMessage; using (SqlConnection conn = new SqlConnection(Connection)) { SqlParameter returnValue = new SqlParameter(); //Holds the bit that determines if insert was successful or not SqlCommand command; command = new SqlCommand(); command.Connection = conn; conn.Open(); command.CommandType = CommandType.StoredProcedure; command.CommandText = "USP_Add_Portfolio"; command.Parameters.AddWithValue("@portfolioName", portfolio.PortfolioName); command.Parameters.AddWithValue("@description", portfolio.Description); command.Parameters.AddWithValue("@createID", portfolio.CreateID); command.Parameters.AddWithValue("@updateID", portfolio.UpdateID); command.Parameters.AddWithValue("@statusMessage", SqlDbType.NVarChar).Direction = ParameterDirection.Output; returnValue.Direction = ParameterDirection.ReturnValue; command.Parameters.Add(returnValue); int i = await command.ExecuteNonQueryAsync().ConfigureAwait(false); if(i == 1) { statusMessage = command.Parameters["@statusMessage"].Value.ToString(); } else { statusMessage = "Error while adding please contact your administrator"; } } return statusMessage;}存儲過程完成并添加新記錄,但出現錯誤int i = await command.ExecuteNonQueryAsync().ConfigureAwait(false);錯誤:期待一個 int 但得到 nvarchar
2 回答

狐的傳說
TA貢獻1804條經驗 獲得超3個贊
ExecuteNonQuery
(暫時不用擔心異步...)返回 UPDATE、INSERT、DELETE 影響的行數,否則返回 -1。它不直接從存儲過程返回信息。
在上面的例子中,我認為你應該在沒有“int i ="的情況下調用“await”,而不用擔心調用的返回值ExecuteNonQueryAsync
。相反,在該值之后,查看 中的值returnValue.Value
,這將是“return”參數的值。它是一個對象,因此請驗證類型或使用Convert.ToInt32()
.

函數式編程
TA貢獻1807條經驗 獲得超9個贊
這看起來不正確,因為SqlDbType.NVarChar
是一個枚舉值:
command.Parameters.AddWithValue("@statusMessage", SqlDbType.NVarChar).Direction = ParameterDirection.Output;
如果你改用這個會發生什么:
command.Parameters.Add(new SqlParameter("@statusMessage", SqlDbType.NVarChar, -1)).Direction = ParameterDirection.Output;
- 2 回答
- 0 關注
- 169 瀏覽
添加回答
舉報
0/150
提交
取消