You're effectively using the paramarray's version already - it's an optional list that can contain any number of elements (http://msdn.microsoft.com/en-us/libra...)
The way to use it is to pass in the values in the order of the expected parameters e.g say you have a sproc like this :
CREATE PROCEDURE [dbo].[somesproc]
@PortalID int,
@Name nvarchar(250)
AS
SELECT *
FROM dbo.sometable
WHERE [Name] = @Name
AND (PortalID = @PortalID OR @PortalID IS NULL)
This expects 2 parameters, one an int and one a string,and returns a list. Assuming I have a SomeTable object that matches what the sometable looks like, I could have code similar to this:
Dim portalID As Integer=0
dim somename as string="some name"
dim sometables as (list of sometable)
sometables = DotNetNuke.Data.DataProvider.Instance().ExecuteScalar("somesproc", portalID,somename)
I appreciate it can look a little odd as it appears that you are giving more parameters than is allowed, but paramarrays treat the final values as a comma delimited list, and not seperate properties.
Cathal