2017-10-17 27 views
-1

存储过程返回一个值:过程没有参数和论点提供3

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

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

    SELECT @URL 
END 

当我试图表现出使用ASP.NET的价值,我得到一个错误:

Procedure spCaller has no parameters and arguments were supplied

这是我的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); 
} 
+1

的可能的复制[如何使用OUTPUT参数的存储过程(https://stackoverflow.com/questions/7770924/how-to-use-output - 参数存储过程) – mjwills

+0

请包含'spBuscarUrl'的源代码。 – mjwills

回答

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解释如何通过不同类型的参数的存储过程。

希望它有帮助!

相关问题