Como le comentaba a extremo, "executeDataset" es un metodo "static" de la clase sqlHelper, y por tanto puede ser invocado directamente sin necesidad de crear una instancia de la clase.
Dado que VFP no soporta este tipo de metodos, la unica forma de simular el codigo seria mediante una instancia publica. Ahora, antes de entrar en SQLHelper, veamos primero ConfigurationManager:
DEFINE CLASS ConfigurationManager AS Custom
AppSettings = NULL
PROCEDURE Init
THIS.AppSettings = CREATE("Collection")
ENDPROC
ENDDEFINE
Tambien necesitaremos una clase para almacenar los parametros de conexion:
DEFINE CLASS appSettings AS Custom
connString = ""
ENDDEFINE
Y una clase para la enumeracion CommandType:
DEFINE CLASS commandTypeEnum AS Custom
Text = 0
StoreProcedure = 1
ENDDEFINE
Finalmente, la clase SQLHelper. Dado que VFP no soporta datasets como los de .NET, lo que haremos sera que el metodo devuelva el alias de un cursor temporal donde almaceno el resultado, De esta forma mantenemos la misma sintaxis que el ejemplo en .NET y cumplicmos con la misma funcion pero al estilo VFP:
DEFINE CLASS SQLHelper AS Custom
PROCEDURE executeDataSet(goAppSettings, pnCommandType, pcCommandText)
LOCAL nConn,cAlias
nConn = SQLSTRINGCONNECT(goAppSettings.connString)
cAlias = SYS(2015)
DO CASE
CASE pnCommandType = CommandType.Text
SQLEXEC(nConn, pcCommandText, cAlias)
CASE pnCommandType = CommandType.StoredProcedure
SQLEXEC (nConn,"EXEC " + pcCommandText, cAlias)
ENDCASE
SQLDISCONNECT(nConn)
RETURN cAlias
ENDPROC
ENDDEFINE
Ahora, al inicio de tu programa principal defines las variables publicas:
PUBLIC SQLHelper, CommandType, ConfigurationManager
CommandType = CREATE("CommandType")
ConfigurationManager = CREATE("ConfigurationManager")
SQLHelper = CREATE("SQLHelper")
Luego, anades una instancia de AppSettings al ConfigurationManager:
LOCAL oAppSettings
oAppSettings = CREATE("AppSettings")
oAppSettings.connString = "cadena de conexion"
ConfigurationManager.AppSettings.Add(oAppSettings)
Y listo: ahora puedes hacer:
PROCEDURE listar_citas
RETURN SqlHelper.executeDataSet(ConfigurationManager.AppSettings(0), CommandType.Text, "SELECT * FROM citas")
ENDPROC
Toma en cuenta que esto es solo una prueba de concepto. A esto tendrias que meterle aun mucho codigo de validacion, en especial a ExecuteDataSet.
Saludos
Victor Espina
Public Shared Function listar_citas() As DataSet
Return SqlHelper.ExecuteDataset(ConfigurationManager.AppSettings(0), CommandType.Text, "select * from citas ")
End Function