Visual CSharp .NET - Store procedure y odbc

 
Vista:
sin imagen de perfil

Store procedure y odbc

Publicado por Rubein (6 intervenciones) el 25/03/2014 14:20:01
Estimados,

Tengo un problema, quiero hacer la llamada a un procedimiento almacenado en una base de datos oracle, desde mi codigo en c# mediante los comandos ODBC y me genera error al compilarlo.
Me puede ayudar en esto?

Codigo Procedimiento:

1
2
3
4
5
6
7
8
PROCEDURE SP_LISTADO_ZONA (ve_cod_zona in number, vs_dato_zona out varchar2) is
    begin
 
      SELECT des_localidad
      into vs_dato_zona
      from Vt_Zonas WHERE Cod_Zona = ve_cod_zona;
 
    end SP_LISTADO_ZONA;

Codigo C sharp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public List<string> CargarZonaDespacho()
        {
            List<string> prueba = new List<string>();
 
 
            using (OdbcConnection connection = new OdbcConnection())
            {
                connection.ConnectionString = ConfigurationManager.ConnectionStrings[EUsuario.CADENA_BASE].ConnectionString;
                using(OdbcCommand comand = new OdbcCommand())
               	{
 
                    comand.Connection = connection;
                    comand.CommandType = CommandType.StoredProcedure;
                    comand.CommandText = ("{CALL PKG_PMVENTAS.SP_LISTADO_ZONA (?)}");
 
                    comand.Parameters.Add("ve_cod_zona", OdbcType.Int).Value = 0;
                    connection.Open();
 
                    OdbcDataReader reader = comand.ExecuteReader();
 
                    while (reader.Read())
                    {
                        prueba.Add(reader[0].ToString());
                    }
 
	            }
 
                connection.Close();
                return prueba;
            }
 
        }


Agradecere su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Store procedure y odbc

Publicado por roger (12 intervenciones) el 26/03/2014 12:14:55
No creería que te salga error al compilarlo, mas bien sería al ejecutarlo, y puede deberse a que solo le estás mandando un parámetro de entrada al procedimiento y según lo que muestras debería tener dos parámetros (uno de ellos de salida). Trata asignando el otro parámetro y asignadole la propiedad Direction como ParameterDirection.Output;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store procedure y odbc

Publicado por Ruben (6 intervenciones) el 26/03/2014 12:30:19
Amigo, se envía solo un parámetro porque el procedimiento solo recibo uno el otro es el resultado de la consulta, el problema ya lo resolví aunque no es muy lógica la respuesta solo debí modificar la variable del parámetro de salida que en este caso era un varchar2 por un cursor y funciona perfecto, el porque de esto ya que la consulta solo devuelve un valor no varios no lo tengo claro(supongo que es problema de la base oracle), gracias de todas formas por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Store procedure y odbc

Publicado por roger (12 intervenciones) el 26/03/2014 12:38:51
Seguramente como usas un ExecuteReader el driver de oracle identifica el cursor como parametro de salida, pero si debes tener claro que el procedimiento no recibe un parámetro como dices "SP_LISTADO_ZONA (ve_cod_zona in number, vs_dato_zona out varchar2)" claramente recibe dos, el hecho de que el segundo parámetro sea resultado o salida del proceso no implica que no sea parámetro, para ello existe la propiedad que te indico ParameterDirection que permite indicar la dirección del parámetro en el procedimiento (si es de entrada o de salida)

http://stackoverflow.com/questions/18837539/syntax-error-while-trying-to-call-an-oracle-package-using-odbc-in-c-sharp

Con el código original que tenías, pero agregando el parámetro de salida y con ExecuteNonQuery tambien de funciona sin necesidad de usar cursor, que por lo que entiendo es lo que querías originalmente

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Store procedure y odbc

Publicado por Ruben (6 intervenciones) el 26/03/2014 12:48:52
Muchas gracias amigo, probare lo que me indicas y comentare los resultados.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Store procedure y odbc

Publicado por Ruben (6 intervenciones) el 27/03/2014 15:44:38
Funciona perfectamente gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Store procedure y odbc

Publicado por roger (12 intervenciones) el 27/03/2014 15:48:50
Con gusto Ruben.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar