过程或函数“usp_StoredProcName”需要参数“@inputVal”,但未提供

本文关键字:@inputVal 参数 函数 usp 过程 StoredProcName | 更新日期: 2023-09-27 18:30:20

我正在使用代码来调用具有 2 个输出和 1 个输入参数的存储过程。但是每次调用这个存储的过程时,我都会收到错误:

CREATE PROCEDURE [dbo].[usp_StoredProcName]
@inputVal nvarchar(255),
@isError bit OUTPUT,
@errorInfo nvarchar(255) OUTPUT
AS BEGIN
DECLARE @totalRow int = 0;
DECLARE @inputValID uniqueidentifier;
SET @isError = 1;
SET @errorInfo = '';
SELECT @inputValID = [inputValID]
FROM testTable
WHERE inputVal = @inputVal;
IF @inputValID IS NULL
BEGIN
SET @isError = 0;
SET @errorInfo = 'inputVal not found';
RETURN
END
END

我使用了几个 C# 方法来调用存储的 proc,我得到它们都返回此错误:

过程或函数"usp_StoredProcName"需要参数"@inputVal",但未提供。

C# 方法 1(调用存储的过程)

using (SqlConnection con = new SqlConnection(myFullConncectionStringToDB))
{
using (SqlCommand cmd = new SqlCommand("usp_StoredProcName", con))
{
cmd.CommandType = CommandType.StoredProcedure;
  cmd.Parameters.AddWithValue("@inputVal", "MyParamVal_12345");
  cmd.Parameters["@isError"].Direction = ParameterDirection.Output;
  cmd.Parameters["@errorInfo"].Direction = ParameterDirection.Output;
  con.Open();
  cmd.ExecuteNonQuery();
  var isError = cmd.Parameters["@isError"].Value;
  var errInfo = cmd.Parameters["@errorInfo"].Value;
  con.Close();
}
}

方法 2(调用存储的过程)

SqlConnection con = new SqlConnection(myFullConncectionStringToDB);
SqlCommand cmd = new SqlCommand("usp_StoredProcName", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter in_parm = new SqlParameter("@inputVal", SqlDbType.NVarChar);
in_parm.Size = 255;
in_parm.Value = "MyParamVal_12345";
in_parm.Direction = ParameterDirection.Input;
cmd.Parameters.Add(in_parm);
SqlParameter out_parm = new SqlParameter("@errorInfo", SqlDbType.NVarChar);
out_parm.Size = 255;
out_parm.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(out_parm);
SqlParameter out_parm1 = new SqlParameter("@isError", SqlDbType.Bit);
out_parm1.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(out_parm1);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

我尝试的上述两种方法都返回相同的错误:

Procedure or function 'usp_StoredProcName' expects parameter '@inputVal', which was not supplied.

请告诉我在执行存储过程的 C# 代码中做错了什么。

显然在我的两个方法中传递了参数值,但无法弄清楚为什么我总是收到此错误。

谢谢你的帮助。

过程或函数“usp_StoredProcName”需要参数“@inputVal”,但未提供

我通常将解决方案分解成碎片,以确保每个部分都有效。

首先,测试存储过程以确保其按计划工作。 示例调用如下。

-- Switch to your database
USE [YourDatabase]
GO
-- Declare output variables
DECLARE @out_is_error bit;
DECLARE @out_error_info nvarchar(255);
-- Execute sp
EXECUTE [dbo].[usp_StoredProcName] 
  N'In Data', 
  @isError = @out_is_error OUTPUT, 
  @errorInfo = @out_error_info OUTPUT;
-- Show any SQL errors / return data
PRINT @@ERROR;
PRINT 'Error = ' + @out_error_info;
PRINT 'Flag = ';
PRINT CAST(@out_is_error as CHAR(1));
GO

接下来,查看拼图的 C# 部分。 Aaron 关于正确数据库的建议是一个很好的建议。 您是否有两个 SP 副本?

祝你好运。