过程没有参数且提供参数,而我的存储过程接受参数时发生异常

本文关键字:参数 存储过程 异常 我的 过程 | 更新日期: 2023-09-27 18:11:14

下面是存储过程:

ALTER PROCEDURE Retrieve_Data 
      @noOfRecords INTEGER
AS
BEGIN TRY
    SET NOCOUNT ON;
    SELECT TOP(@noOfRecords) studentId
    FROM Student;
END TRY    
BEGIN CATCH    
   RETURN -101
END CATCH    
RETURN 0 
下面是c#代码:
DataSet ds = null;
try
{
    using (SqlConnection conn = new SqlConnection(ConfigurationSettings.ConectionString))
    {
        using (SqlDataAdapter da = new SqlDataAdapter())
        {
            da.SelectCommand = new SqlCommand(storeProcName, conn);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            SqlParameter param= new SqlParameter("@noOfRecords", SqlDbType.Int);
            param.Value=10;
            da.SelectCommand.Parameters.Add(param);
            ds = new DataSet();
            da.Fill(ds, "result");
            if (conn.State == ConnectionState.Open)
            {
                conn.Close();
            }
            return ds;
        }
    }
}

在执行代码时,我得到一个sql异常:

Procedure Retrieve_Data没有参数,并且提供了参数

过程没有参数且提供参数,而我的存储过程接受参数时发生异常

存储过程的语法不正确。您需要在括号

内提供输入参数
ALTER PROCEDURE [dbo].[Retrieve_Data]
(
    @noOfRecords INT
)
AS
BEGIN

也可以尝试清除代码中的参数:

if (conn.State == ConnectionState.Open)
{
   da.SelectCommand.Parameters.Clear();;
   conn.Close();
}

更改存储过程并使用BEGIN ... END

ALTER PROCEDURE [dbo].[Retrieve_Data]
      @noOfRecords INT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
    SELECT TOP(@noOfRecords) studentId
    FROM Student;
END TRY    
BEGIN CATCH    
   RETURN -101
END CATCH    
RETURN 0; 
END

ORDER BY ...对表Student排序的第二件事