【问题标题】:Procedure or Function 'Student' expects parameter '@SortExpression', which was not supplied过程或函数“学生”需要参数“@SortExpression”,但未提供该参数
【发布时间】:2011-06-27 09:35:04
【问题描述】:

我收到了这个奇怪的错误,我检查了 sort 的值,它也不是 null 仍然给我的代码错误。

public static List<MyDb_student> GetAllUsers(String sort, CustomPaging paging)
        {
            con.Open();
            SqlCommand objParams = new SqlCommand();
            objParams.Parameters.Add("@SortExpression",SqlDbType.VarChar).Value = sort;
            objParams.Parameters.Add("@StartRowIndex",SqlDbType.Int).Value = paging.startRow;
            objParams.Parameters.Add("@MaximumRows",SqlDbType.Int).Value = paging.maxRow; 

            objParams.CommandType = System.Data.CommandType.StoredProcedure;
            objParams.CommandText = "clud_GetAllUsers";
            objParams.Connection = con;
            SqlDataAdapter objSda = new SqlDataAdapter(objParams.CommandText, con);
            DataSet objDS = new DataSet();
            objSda.Fill(objDS);
            //to inialize the list.
            List<MyDb_student> lstStudent = new List<MyDb_student>();
            //to itereate through the data row.
            foreach (DataRow  dr in objDS.Tables[0].Rows)
            {
                //passing each row to the constructor to dump the values in the constructor.
                MyDb_student objStu = new MyDb_student(dr);
                //adding the value to the list by passing the object.
                lstStudent.Add(objStu);
            }
            con.Close();
            return lstStudent;
        }

我的存储过程

ALTER PROCEDURE [dbo].[clud_GetAllUsers] 
    @SortExpression VARCHAR(100),
    @StartRowIndex INT,
    @MaximumRows INT   

AS
BEGIN
IF LEN(@sortExpression) = 0
    SET @sortExpression = 'UserID'

DECLARE @sql nvarchar(4000)

SET @sql = 'SELECT * FROM (
                            SELECT UserID,UserName,EmailID,MobileNO,ROW_NUMBER() OVER (ORDER BY ' + @SortExpression + ' desc) AS RowRank
                            FROM UserRegistration ) 
                        AS UserRegistrationWithRowNumbers
            WHERE RowRank > ' + CONVERT(nvarchar(10), @StartRowIndex) +
                ' AND RowRank <= (' + CONVERT(nvarchar(10), @StartRowIndex) + ' + '
                + CONVERT(nvarchar(10), @MaximumRows) + ')'
    EXEC sp_executesql @sql
END

我无法修复它。

【问题讨论】:

  • 如果你设置了一个存储过程默认值,你会得到更多的错误吗?
  • 事实上,这个错误很可能不是来自那个代码
  • 尝试从sql执行stor proc
  • 我做到了,它工作正常
  • 不使用数据集..你可以用sqldatareader检查吗?

标签: asp.net sql-server-2005 ado.net


【解决方案1】:

代替

IF LEN(@sortExpression) = 0
    SET @sortExpression = 'UserID'

尝试添加isnull捕获null:

IF LEN(ISNULL(@sortExpression, '')) = 0
    SET @sortExpression = 'UserID'

【讨论】:

  • 我在存储过程中改变了这个没有帮助
【解决方案2】:

简单检查如下:

     if(@sortExpression IS NULL)
           SET @sortExpression = 'UserID'

希望这能解决问题..

【讨论】:

  • 我找到了罪魁祸首 SqlDataAdapter objSda = new SqlDataAdapter(objParams, con)
猜你喜欢
  • 2020-12-14
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多