存储过程返回一个值:
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);
}
错误消息非常清楚,表明您的存储过程不需要任何参数,而您从 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
你可以看看这个帖子 https://www.mssqltips.com/sqlservertutorial/163/returning-stored-procedure-parameter-values-to-a-calling-stored-procedure/解释如何将不同类型的参数传递给存储过程。
希望能帮助到你!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)