从 .net 发出 运行 存储过程

Issue running stored procedure from .net

我有这个 stored procedure :

CREATE PROCEDURE [dbo].[GetTransactionFeeType_Pager]
      @PageIndex INT = 1
      ,@PageSize INT = 10
      ,@ProgramName VARCHAR = ''
      ,@RecordCount INT OUTPUT
AS
BEGIN
      SET NOCOUNT ON;
      SELECT ROW_NUMBER() OVER
      (
            ORDER BY ID ASC
      )AS RowNumber
    ,FeeType,TransactionNumber,Amount,TransactionDate,ResponseDescription,PaidUsing

      INTO #Results
      FROM TransactionLog where FeeType=@ProgramName

      SELECT @RecordCount = COUNT(*)
      FROM #Results

      SELECT * FROM #Results
      WHERE RowNumber BETWEEN(@PageIndex -1) * @PageSize + 1 AND(((@PageIndex -1) * @PageSize + 1) + @PageSize) - 1

      DROP TABLE #Results
END

基本上就是return分页……

现在,当来自 sql 服务器的 运行 并将参数传递为;

时,以上运行正常
1    ,    10   ,     Deposit 

但是使用下面的代码:

  string query = "[GetTransactionFeeType_Pager]";
    SqlCommand cmd = new SqlCommand(query);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@PageIndex", pageIndex);
    cmd.Parameters.AddWithValue("@PageSize", PageSize);
    cmd.Parameters.AddWithValue("@ProgramName", programID.ToString());
    cmd.Parameters.Add("@RecordCount", SqlDbType.Int, 4).Direction =                
    ParameterDirection.Output;

与 SQL SERVER 相同; 1 , 10 , 存款 但它 return 没有结果/空结果。奇怪的是我相信它昨天工作正常所以不知道发生了什么......

有什么建议吗?

VARCHAR() 没有指定长度通常默认长度为 1 - 然后您传递的值将被静默截断。

所以

CREATE PROCEDURE [dbo].[GetTransactionFeeType_Pager]
     @PageIndex INT = 1
     ,@PageSize INT = 10
     ,@ProgramName VARCHAR(99) = ''
     ,@RecordCount INT OUTPUT
AS
...

通过定义@ProgramName

的长度来达到目的