If I interpret the code correctly, you try to pass a large amount of rows as a paramter to stored procedure which then again returns a result set which is used as a data source for a grid.
Why do you need 1.5 million rows as a parameter? If you're inserting a large amount of data into the database I suggest using for example
SqlBulkCopy[
^] instead of a huge parameter.