Click here to Skip to main content
15,908,661 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
I am Working on my project, And frustrated to solve this error. " Procedure or function uspSetSubscriptions has too many arguments specified". If any one knows please help.


C#
protected void BtnSubscribe_Click(object sender, EventArgs e)
    {
        //Response.Write(AppUserID); 
        //Response.Write(Convert.ToString(ViewState["packtype"]));
        //Response.Write(DDConstituency.SelectedValue);
        try
        {
            db1.sqlcmd = new SqlCommand("uspSetSubscriptions");
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
db1.sqlcmd.CommandType = CommandType.StoredProcedure;
db1.sqlcmd.Parameters.Clear();
db1.sqlcmd.Parameters.AddWithValue("@UserID", Convert.ToInt32(AppUserID));
db1.sqlcmd.Parameters.AddWithValue("@packageType", Convert.ToString(ViewState["packtype"]));
db1.sqlcmd.Parameters.AddWithValue("@Cost", Convert.ToDouble(ViewState["packagecost"]));
db1.sqlcmd.Parameters.AddWithValue("@MaxNotific", Convert.ToInt32(ViewState["mxnotificaton"]));
db1.sqlcmd.Parameters.AddWithValue("@MaxVideos", Convert.ToInt32(ViewState["mxvidoes"]));
db1.sqlcmd.Parameters.AddWithValue("@MaxArticles", Convert.ToInt32(ViewState["mxarticles"]));
db1.sqlcmd.Parameters.AddWithValue("@MaxEvent", Convert.ToInt32(ViewState["mxevents"]));
db1.sqlcmd.Parameters.AddWithValue("@MaxAllias", Convert.ToInt32(ViewState["mxallias"]));
db1.sqlcmd.Parameters.AddWithValue("@ConstID", Convert.ToInt32(DDConstituency.SelectedValue));
db1.sqlcmd.Parameters.Add("@Identity", SqlDbType.Int);
db1.sqlcmd.Parameters["@Identity"].Direction = ParameterDirection.Output;
db1.sqlcmd.Connection = db1.sqlcon;
db1.sqlcon.Open();
db1.sqlcmd.ExecuteNonQuery();
Subscripid = Convert.ToInt32(db1.sqlcmd.Parameters["@Identity"].Value);
ViewState["Subscripid"] = Subscripid; 
            }
        }
        catch (Exception ex){   Response.Write(ex.Message); }
        finally {db1.sqlcon.Close(); }
    }


SQL
Create Proc uspSetSubscriptions
@packageType varchar(25), @UserID int, @ConstID int,
@MaxNotific int, @MaxArticles int, @MaxVideos int,@MaxEvent int,@MaxAllias int,@Cost float,@Identity int OUT
AS
BEGIN
DECLARE @PackageId int
SELECT @PackageId = PackageID FROM TblPackages WHERE Category = @packageType 
INSERT INTO TblSubscription(UserId, PackageId, ConstID, StartDate, FinishDate, MaxNotification, MaxArticles, MaxVideos, MaxEvent, MaxAllias, IsActive, IsPaid)
VALUES(@UserID,@PackageId,@ConstID,GetDate(),GETDATE()+30,@MaxNotific,@MaxArticles,@MaxVideos,@MaxEvent,@MaxAllias,0,0)
SET @Identity = SCOPE_IDENTITY()
END
Posted
Comments
Maciej Los 2-May-14 10:56am    
Do not repost!
http://www.codeproject.com/Questions/767655/Procedure-has-too-many-arguments-specified

After:
SQL
SET @Identity = SCOPE_IDENTITY()

add
SQL
RETURN @Identity


The reason your database is updated only with hard coded values is that, the ViewState["packtype"] (and others) returns empty string (""). Debug the program and check what value is under the cursor.
 
Share this answer
 
Comments
Sanket Saxena 2-May-14 11:12am    
SELECT @Identity = SCOPE_IDENTITY(). This will also work Maciej right?
Maciej Los 2-May-14 11:18am    
As per my experience, RETURN word must be included, even if after them there is no name of parameter.
Please, see: http://technet.microsoft.com/en-us/library/ms187004%28v=sql.105%29.aspx
Sanket Saxena 2-May-14 15:37pm    
I think Stored Procedure may or may not return a value. If it must return then it will be a function. I think RETURN works but i have used SELECT SCOPE_IDENTITY() always that's why i suggest.

+5 for RETURN
Maciej Los 2-May-14 15:39pm    
Thank you, Sanket ;)
Sanket Saxena 2-May-14 15:44pm    
Always welcome Maciej :)
Try use SELECT @Identity = SCOPE_IDENTITY() instead of SET @Identity = SCOPE_IDENTITY()
 
Share this answer
 
v4
Comments
Muhammad Taqi Hassan Bukhari 2-May-14 9:04am    
I have passed 10 parameters, but in the insert query the last two values are hard-coded value and their datatype is bit so i put direct 0(false).
Sanket Saxena 2-May-14 9:20am    
check my updated solution if it works for you.
Maciej Los 2-May-14 11:21am    
SELECT and SET in this case doing exactly the same.
I don't know who down-voted your answer, but it wasn't me.
Sanket Saxena 2-May-14 15:35pm    
I also dont know who downvoted but its ok may be they dont know the answer :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900