存储过程返回一个值:
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);
}
答案 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;