Un método que regrese parámetros

07/06/2005 - 00:30 por Benton | Informe spam
Hola, tengo el siguiente método, que regresa una colección de parámetros a
mi antojo:

FbParameterCollection MisParametros()
{
FbCommand cmd = new FbCommand();
cmd.Parameters.Add("Lo que sea");
cmd.Parameters.Add("Lo que sea");

return cmd.Parameters;
}

Funciona, pero me forza a crear un objeto Comando. Inicialmente pensé
hacerlo así

{
FbParameterCollection pars;
pars.Add("Lo que sea");
pars.Add("Lo que sea");

return pars;
}

Pero después tengo excepciones porque "pars" es nulo. Para evitarlo, pensé
hacer:

FbParameterCollection pars = new FbParameterCollection()
pars.Add("Lo que sea");

porque la clase FbParameterCollection no tiene constructor, dice el
compilador. Y ya me perdí.

¿Estoy forzado a apoyarme en el objeto Comando o existe una mejor manera de
lograr lo que busco?

Gracias y Saludos,

-Benton

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
07/06/2005 - 01:39 | Informe spam
Benton,

Efectivamente, no se le ve constructores o métodos-fábrica a la clases
xxxParameterCollection por ningún lado. Yo pienso que la idea original era
la de "atar" un conjunto de parámetros a un comando SQL concreto. Pero es
cierto que a veces es conveniente compartir los mismos parámetros entre
varias sentencias (creo haberlo hecho alguna vez).

Tu primera versión no me parece tan mala a pesar de todo... A ver si a
alguien del grupo se le ocurre algo mejor.

Slds - Octavio

"Benton" escribió en el mensaje
news:
Hola, tengo el siguiente método, que regresa una colección de parámetros a
mi antojo:

FbParameterCollection MisParametros()
{
FbCommand cmd = new FbCommand();
cmd.Parameters.Add("Lo que sea");
cmd.Parameters.Add("Lo que sea");

return cmd.Parameters;
}

Funciona, pero me forza a crear un objeto Comando. Inicialmente pensé
hacerlo así

{
FbParameterCollection pars;
pars.Add("Lo que sea");
pars.Add("Lo que sea");

return pars;
}

Pero después tengo excepciones porque "pars" es nulo. Para evitarlo,
pensé hacer:

FbParameterCollection pars = new FbParameterCollection()
pars.Add("Lo que sea");

porque la clase FbParameterCollection no tiene constructor, dice el
compilador. Y ya me perdí.

¿Estoy forzado a apoyarme en el objeto Comando o existe una mejor manera
de lograr lo que busco?

Gracias y Saludos,

-Benton
Respuesta Responder a este mensaje
#2 Steven Lewis
07/06/2005 - 03:28 | Informe spam
Hola grupo.

hace unos meses hice un desarrollo usando el Oracle Data Provider de Oracle
para conectarme a una base de datos 8.1.7.

El asunto es que se me presentó lo mismo que plantean y es que todos los
comandos requerían la misma cantidad de parámetros, así que cuando
refactoricé creé la siguiente función:

/// <summary>
/// Inicializa los parámetros. Son constantes en todos los procedimientos.
C_CURSOR_RES y P_TRAMA
/// </summary>
/// <param name="ParametersArray">Arreglo de parámetros que van al
procedimiento almacenado</param>
private static void CrearParametros(OracleParameter[] ParametersArray){
ParametersArray[0] = new OracleParameter("C_CURSOR_RES",
OracleDbType.RefCursor);
ParametersArray[0].DbType = DbType.Object;
ParametersArray[0].Direction = ParameterDirection.InputOutput;
ParametersArray[1] = new OracleParameter("P_TRAMA", OracleDbType.Varchar2);
}

Propiamente NO devuelve el arreglo de parámetros, en cambio los trata como
parámetros por referencia, así puedo modificarlos dentro.

Es posible que esta solución te sirva, es decir, tener un arreglo de
parámetros y tratarlo como parámetro por referencia dentro de tu función.

Acá hay algo parecido a tu caso con el proveedor de datos de SQL Server

/// <summary>
/// Recibe un arreglo de parámetros y lo llena con valores
/// </summary>
/// <param name="hello">Arreglo de parámetros SqlParameter</param>
private void hola(SqlParameter[] hello){
// Creo los parámetros, puedo usar cualquier constructor
hello[0] = new SqlParameter();
hello[1] = new SqlParameter();

// Asigno valores
hello[0].ParameterName = "@Hola0";
hello[0].Value = "Hola0";
hello[1].ParameterName = "@Hola1";
hello[1].Value = "Hola1";
}

Saludos

Steven Lewis


"Benton" escribió en el mensaje
news:
Hola, tengo el siguiente método, que regresa una colección de parámetros a
mi antojo:

FbParameterCollection MisParametros()
{
FbCommand cmd = new FbCommand();
cmd.Parameters.Add("Lo que sea");
cmd.Parameters.Add("Lo que sea");

return cmd.Parameters;
}

Funciona, pero me forza a crear un objeto Comando. Inicialmente pensé
hacerlo así

{
FbParameterCollection pars;
pars.Add("Lo que sea");
pars.Add("Lo que sea");

return pars;
}

Pero después tengo excepciones porque "pars" es nulo. Para evitarlo,
pensé hacer:

FbParameterCollection pars = new FbParameterCollection()
pars.Add("Lo que sea");

porque la clase FbParameterCollection no tiene constructor, dice el
compilador. Y ya me perdí.

¿Estoy forzado a apoyarme en el objeto Comando o existe una mejor manera
de lograr lo que busco?

Gracias y Saludos,

-Benton
Respuesta Responder a este mensaje
#3 Benton
07/06/2005 - 17:14 | Informe spam
Gracias a todos por sus respuestas.

Al final he decidido que el método regrese un objeto ListDictionary, donde
la "Key" de cada item es un objeto Parameter, y su "Value" es el valor que
tendrá dicho parámetro. Más tarde, cuando voy dar estos parámetros al objeto
Comando que los necesita para ejecutarse, hago esto:
foreach (DictionaryEntry item in listaPar)
Comando.Parameters.Add((FbParameter)item.Key).Value = item.Value;

Y funciona perfectamente.

Saludos,

-Benton

"Steven Lewis" escribió en el mensaje
news:%
Hola grupo.

hace unos meses hice un desarrollo usando el Oracle Data Provider de
Oracle para conectarme a una base de datos 8.1.7.

El asunto es que se me presentó lo mismo que plantean y es que todos los
comandos requerían la misma cantidad de parámetros, así que cuando
refactoricé creé la siguiente función:

/// <summary>
/// Inicializa los parámetros. Son constantes en todos los procedimientos.
C_CURSOR_RES y P_TRAMA
/// </summary>
/// <param name="ParametersArray">Arreglo de parámetros que van al
procedimiento almacenado</param>
private static void CrearParametros(OracleParameter[] ParametersArray){
ParametersArray[0] = new OracleParameter("C_CURSOR_RES",
OracleDbType.RefCursor);
ParametersArray[0].DbType = DbType.Object;
ParametersArray[0].Direction = ParameterDirection.InputOutput;
ParametersArray[1] = new OracleParameter("P_TRAMA",
OracleDbType.Varchar2);
}

Propiamente NO devuelve el arreglo de parámetros, en cambio los trata como
parámetros por referencia, así puedo modificarlos dentro.

Es posible que esta solución te sirva, es decir, tener un arreglo de
parámetros y tratarlo como parámetro por referencia dentro de tu función.

Acá hay algo parecido a tu caso con el proveedor de datos de SQL Server

/// <summary>
/// Recibe un arreglo de parámetros y lo llena con valores
/// </summary>
/// <param name="hello">Arreglo de parámetros SqlParameter</param>
private void hola(SqlParameter[] hello){
// Creo los parámetros, puedo usar cualquier constructor
hello[0] = new SqlParameter();
hello[1] = new SqlParameter();

// Asigno valores
hello[0].ParameterName = "@Hola0";
hello[0].Value = "Hola0";
hello[1].ParameterName = "@Hola1";
hello[1].Value = "Hola1";
}

Saludos

Steven Lewis


"Benton" escribió en el mensaje
news:
Hola, tengo el siguiente método, que regresa una colección de parámetros
a mi antojo:

FbParameterCollection MisParametros()
{
FbCommand cmd = new FbCommand();
cmd.Parameters.Add("Lo que sea");
cmd.Parameters.Add("Lo que sea");

return cmd.Parameters;
}

Funciona, pero me forza a crear un objeto Comando. Inicialmente pensé
hacerlo así

{
FbParameterCollection pars;
pars.Add("Lo que sea");
pars.Add("Lo que sea");

return pars;
}

Pero después tengo excepciones porque "pars" es nulo. Para evitarlo,
pensé hacer:

FbParameterCollection pars = new FbParameterCollection()
pars.Add("Lo que sea");

porque la clase FbParameterCollection no tiene constructor, dice el
compilador. Y ya me perdí.

¿Estoy forzado a apoyarme en el objeto Comando o existe una mejor manera
de lograr lo que busco?

Gracias y Saludos,

-Benton




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida