1

I have a method like this:-

public List<InterestedParty> GetDealViewData(string username,Guid opportunityId, int fromIndex, int toindex, string IPStatus, Guid? JllBroker, string ipsearch,ref string sortby, ref string direction, out int totalRecords, int offerType)
{
            if (sortby == null)
                sortby = string.Empty;

            if (direction == null)
                direction = string.Empty;

            InterestedPartyMapper interestedPartyMapper = new InterestedPartyMapper();
            InterestedParty dummyIP = new InterestedParty();

            SqlParameter outParam = new SqlParameter();
            outParam.ParameterName = "@TotalRecords";
            outParam.SqlDbType = SqlDbType.Int;
            outParam.Direction = ParameterDirection.Output;

            SqlParameter sortParam = new SqlParameter();
            sortParam.ParameterName = "@sortby";
            sortParam.SqlDbType = SqlDbType.VarChar;
            sortParam.Size = 500;
            sortParam.Value = sortby.Trim();
            sortParam.Direction = ParameterDirection.InputOutput;

            SqlParameter dirParam = new SqlParameter();
            dirParam.ParameterName = "@direction";
            dirParam.SqlDbType = SqlDbType.VarChar;
            dirParam.Size = 500;
            dirParam.Value = direction.Trim();
            dirParam.Direction = ParameterDirection.InputOutput;

            IEnumerable<InterestedParty> interestedParties = DatabaseUtility.ExecuteReader<InterestedParty>(DatabaseUtility.DataWarehouseConnectionString,
                            "cp_GetDealViewInterestedParties",
                            CommandType.StoredProcedure,
                            new SqlParameter[] { new SqlParameter("@opportunityid", opportunityId),
                            new SqlParameter("@fromIndex", fromIndex),
                            new SqlParameter("@toindex", toindex),
                            new SqlParameter("@ipstatus", IPStatus),
                            new SqlParameter("@jllbroker", JllBroker),
                            new SqlParameter("@IPNameSearch", ipsearch),
                            new SqlParameter("@domainname", username),
                            sortParam,
                            dirParam,
                            new SqlParameter("@offerType", offerType),
                            outParam},
                            interestedPartyMapper.Mapper);
            totalRecords = Convert.ToInt32(outParam.Value);
            sortby = sortParam.Value.ToString();
            direction = dirParam.Value.ToString();
            return interestedParties.ToList();
}

The stored procedure parameters are like this:

ALTER PROCEDURE [dbo].[cp_GetDealViewInterestedParties] 
 @opportunityid uniqueidentifier, 
 @ipstatus  nvarchar(250) = null,
 @jllbroker uniqueidentifier = null, 
 @fromindex int = 1,
 @toindex int = 40,  
 @IPNameSearch  nvarchar(255) = null,
 @offerType int = 0,
 @sortby nvarchar(255) OUTPUT,
 @direction varchar(4) OUTPUT,
 @domainname varchar(255) = null,
 @TotalRecords int OUTPUT
 with recompile
AS
BEGIN
set nocount on
    DECLARE @defaultSortBy nvarchar(255) = 'ModifiedOn'
    DECLARE @defaultDirection varchar(4) = 'desc'
    DECLARE @userPreferenceLookupResults nvarchar(255)

I get the following error:

The formal parameter "@sortby" was not declared as an OUTPUT parameter, but the actual parameter passed in requested output.

Any ideas and thoughts are appreciated

4

1 回答 1

0

In your code, you are defining '@sortby' as a varchar, whereas your stored procedure is requiring an nvarchar type. Does changing this fix the issue?

        SqlParameter sortParam = new SqlParameter();
        sortParam.ParameterName = "@sortby";
        sortParam.SqlDbType = SqlDbType.VarChar; //<---- should be nvarchar?
        sortParam.Size = 500;
        sortParam.Value = sortby.Trim();
        sortParam.Direction = ParameterDirection.InputOutput;



-- sql def: @sortby nvarchar(255) OUTPUT,
于 2013-05-29T04:32:25.047 回答