we can have optional parameters in the getdata definition and use it as needed.
Please use provider pattern and in your GetData method prepare a class and pass that class object rather than passing multiple parameters.
Create a base parameter class; use it in your GetData method as parameter. and in your method call, just pass the actual implementation of parameter base class. Hope that solves your issue.
use composite design pattern .. create datasource base class(abstract) and inehrit diff concrete data source with all having own logic to getdata method with diff params. now in main class will keep reference of base object and initialize this at runtime and which intern will invoke appropriate concrete method