The problem is you have declared the parameter as varchar in procedure, but passing it as a integer value.
{"@contactid",Convert.ToInt32(Txtcontactid.Text)}};
DBTask.ExecuteQuery_SP("sp_DeleteContactSubscriptionDetail", objdel);
If you are converting here, then declare the parameter as integer in procedure.
You are unnecessarily converting again in procedure using...
set @contactid=convert (int, @contactid)
So, declare as integer and try.
@contactid as int