过程没有参数和论点提供3
问题描述:
存储过程返回一个值:过程没有参数和论点提供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);
}
答
该错误消息是很清楚,你的存储过程不期望任何参数,而你从传递参数的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解释如何通过不同类型的参数的存储过程。
希望它有帮助!
答
此行是错误:
cmd.Parameters.Add("@URL", SqlDbType.NVarChar).Value = Label1.Text.Trim();
@URL
是不是在你的存储过程中设置了一个param。
检查正确的语法在这里: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;
的可能的复制[如何使用OUTPUT参数的存储过程(https://stackoverflow.com/questions/7770924/how-to-use-output - 参数存储过程) – mjwills
请包含'spBuscarUrl'的源代码。 – mjwills