过程没有参数和参数提供3

时间:2017-10-17 12:54:48

标签: c# asp.net sql-server stored-procedures

存储过程返回一个值:

ALTER PROCEDURE [dbo].[spCaller]
AS 
BEGIN
    DECLARE @URL nvarchar(255);  

    EXECUTE spBuscarUrl 'MIREX-2017-00001', @url = @URL OUTPUT;  

    SELECT @URL
END

当我尝试使用ASP.NET显示值时,出现错误:

  

过程spCaller没有提供参数和参数

这是我的C#代码:

try
{  
    string s = System.Configuration.ConfigurationManager.ConnectionStrings["dba"].ConnectionString;

    SqlConnection conexion = new SqlConnection(s);
    conexion.Open();

    using (SqlCommand cmd = new SqlCommand("spCaller",conexion))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@URL", SqlDbType.NVarChar).Value = Label1.Text.Trim();

        object o = cmd.ExecuteScalar();

        if(o != null)
        {
            string id = o.ToString();
            lblTitulo.Text = "Completed";
        }
    }
}
catch (Exception ex)
{
    throw new Exception(ex.Message);
}

2 个答案:

答案 0 :(得分:1)

错误消息非常清楚,您传递参数的c#代码时,您的存储过程不需要任何参数。

实际上,您已在存储过程中指定了一个变量而不是参数,您需要在SP名称参数之后使用它的数据类型指定它,并在您的情况下使用OUTPUT关键字作为输出参数。

应该是:

ALTER procedure [dbo].[spCaller] @URL NVarChar(255) OUTPUT
.......
.......

您的最终存储过程如下:

ALTER procedure [dbo].[spCaller] @URL NVarChar(255) OUTPUT
AS BEGIN
EXECUTE spBuscarUrl  
    'MIREX-2017-00001', @url = @URL OUTPUT;  
select @URL
END

您可以查看this post,了解如何将不同类型的参数传递给存储过程。

希望它有所帮助!

答案 1 :(得分:0)

这一行是错误:

cmd.Parameters.Add("@URL", SqlDbType.NVarChar).Value = Label1.Text.Trim();

@URL不是存储过程中的参数。

在此处检查正确的语法:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-procedure-transact-sql

CREATE PROCEDURE What_DB_is_that 
     @ID int   
AS    
    SELECT DB_NAME(@ID) AS ThatDB;