Foros del Web » Programación para mayores de 30 ;) » .NET »

O.o que pasa aqui ?

Estas en el tema de O.o que pasa aqui ? en el foro de .NET en Foros del Web. Consulta: Tengo un formulario donde se ingresa una imagen y datos de un producto, al ingresarlo este producto ingresa en 3 tablas por diferentes procedimientos ...

  #1 (permalink)  
Antiguo 09/02/2010, 15:19
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
O.o que pasa aqui ?

Consulta:
Tengo un formulario donde se ingresa una imagen y datos de un producto, al ingresarlo este producto ingresa en 3 tablas por diferentes procedimientos almacenados. para ello trabajo en querys transaccionales (si una falla no hará nada aunque haya ingresado en una tabla anteriormente)

Ahora, al ingresar los datos con la imágen nula, me ingresa perfectamente, pero al agregarle una imagen (de pequeña resolucion) y al ingresar el producto me da error...

Estoy trabajando con Oracle (blob el campo de la imagen) y con c#

alguno sabria explicar por que pasaria eso?
  #2 (permalink)  
Antiguo 09/02/2010, 15:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Sin ver el código que está implicado en cada momento, estaríamos adivinando...
La explicación es muy vaga y tu problema muy concreto: Hay que ver el código.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/02/2010, 16:21
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

ok, este petenece al formulario y es cuando ingresa la imagen a la entidad
ENTIDAD = new ENTIDAD();
Código:
ENTIDAD.imagen = grabaImagen((Bitmap)pbxFoto.Image);
ahora en la capa acceso de datos al utilizar el Procedimiento Almacenado y utilizando un campo DateTable llamado tabla y oracleparameter p

Código:
p[x] = new OracleParameter("param_imagen_producto", OracleType.Blob);
p[x].Value = ENTIDAD.Imagen_producto;
p[x].Direction = ParameterDirection.InputOutput;

p[x] = new OracleParameter("param_salida", OracleType.Cursor);
p[x].Direction = ParameterDirection.Output;



AccesoDatos = new clsADAccesoDatosOracle();
AccesoDatos.IniciaTran();
tabla = AccesoDatos.EjecutaQueryOracleTran("PKG_P.pa_insertaproducto", p);

el catch me trae este mensaje: "Referencia a objeto no establecida como instancia de un objeto."


Ahota si ejecuto el IniciaTran() abajo de tabla, corre perfectamente sin errores, pero lo malo es que si algún procedimiento que sigue es erroneo (y se ejecutan de la misma manera) no realizarán ningún commit y solo quedara ingresado por el primer Procedimiento
  #4 (permalink)  
Antiguo 09/02/2010, 17:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Me parece (puede que me equivoque) que el tema está en que el OracleParameter debe ser un Byte() y tu le estás mandando un Image. Es decir, hay que convertir la imagen en un array de bytes para que la creación del parámetro sea correcta.
Al menos eso es lo que describe este caso en C#.net:
Insert /retrieve an image into/ from a blob field in Oracle database using C#.Net
También encontré lo mismo en este ejemplo:
How to insert a BLOB image from a client PC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/02/2010, 07:19
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

mira, la imagen está ingresando en byte[], pero la cosa es que cuando inicio el trans esos registros que estoy guardando quedan "flotando" hasta que se realize el commit que eso pasa en el último procedimiento que se realiza dentro de la capa de acceso de datos, para que no ingrese los registros en las tablas inmediatamente por seguridad por si llegase a fallar uno de los otros procedimientos. porque si yo hiciera esto...
(pusiera debajo de la ejecución del procedimiento el trans)
Código:
AccesoDatos = new clsADAccesoDatosOracle();

tabla = AccesoDatos.EjecutaQueryOracleTran("PKG_P.pa_insertaproducto", p);

AccesoDatos.IniciaTran(); 
no me tira ningún error e ingresa la imagen en la tabla de la entidad... pero lo malo es que si llegase a fallar uno de los otros procedimientos, no insertará en las demas tablas y solo insertara en la tabla de la entidad de producto.

Ese es el problema :(
intenté dejar la imagen estatica, pero tampoco sirve :(
(el trans la destruye por asi decirlo)
  #6 (permalink)  
Antiguo 10/02/2010, 10:49
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

alguien podria guiarme?
como solucionar el problemilla?


gracias
  #7 (permalink)  
Antiguo 10/02/2010, 15:17
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

mm bueno para guiarse un poco el trans es así O.o
Código:
 public void IniciaTran()
        {
            BDOracle(); //para que conecte a la BD
            Trans = OraCon.BeginTransaction(); //OraCon es la conexion 
        }

Última edición por Panshop; 10/02/2010 a las 15:54
  #8 (permalink)  
Antiguo 10/02/2010, 19:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Cita:
el catch me trae este mensaje: "Referencia a objeto no establecida como instancia de un objeto."
Esto es lo que me tiene intrigado, que en definitiva es el corazón del problema.
¿Qué es lo que dice el InnerText del catch?
¿En qué sentencia dice que no existe la instancia y a qué objeto se refiere?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/02/2010, 19:33
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

lo mas probable es que pasa algo con la imagén, porque al hacer debug por todos los parametros de entrada pasan bien, pero al llegar al iniciaTrans y al posicionarme en "tabla" dice null y al pasar ese punto llega al catch inmediatamente con ese mensaje


como dige anteriormente al poner el iniciaTrans bajo la "tabla" pasan todos los registros
pero no puedo hacer eso porque igual ingresaría los datos en la tabla de productos si ocurre algún error en otro procedimiento

en los otros procedimientos el iniciaTrans está arriba de "tabla" y no hay problemas con eso, porque no ingresa ningúna imágen

Última edición por Panshop; 10/02/2010 a las 19:42
  #10 (permalink)  
Antiguo 10/02/2010, 19:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Cita:
lo mas probable es que pasa algo con la imagén, porque al hacer debug por todos los parametros de entrada pasan bien, pero al llegar al iniciaTrans y al posicionarme en "tabla" dice null y al pasar ese punto llega al catch inmediatamente con ese mensaje
¿Es, entonces, una excepción que viene de Oracle?

Por lo que dices, entonces el problema está en AccesoDatos.EjecutaQueryOracleTran...
¿El parámetro p tiene valor en esa llamada?
¿Tienes un Try/Catch para un Exception y un OracleException adentro que pueda capturar el problema?
Eso ayudaría a establecer si el problema está en la aplicación o en el procedure...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 10/02/2010, 20:40
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

intentaré lo del try catch con OracleException
no lo habia pensado puesto que funciona en las otras consultas que tengo dentro del programa y en otros procedimientos que actuan como transaccionales

gracias mañana te comento por mensaje interno como me fue con eso y si lo resolvi, lo postearé ;)

gracias nuevamente por ser quien em respondio
PD: estoy esperando a que me pasen el pc denuevo y demorará
  #12 (permalink)  
Antiguo 11/02/2010, 08:08
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

encerre en try catch y el catch(OracleException x) se lo salta y pasa inmediatamente al catch que me dice "Referencia a objeto no establecida como instancia de un objeto."

si, el valor p tiene la coleccion de los parametros de entrada del procedimiento
  #13 (permalink)  
Antiguo 11/02/2010, 08:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

¿Pudiste debuggearlo línea a línea?
¿Cuál es la última línea que ejecutó y en cuál saltó a el catch?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 11/02/2010, 08:33
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

Código:
AccesoDatos = new clsADAccesoDatosOracle();

AccesoDatos.IniciaTran();

tabla = AccesoDatos.EjecutaQueryOracleTran("PKG_P.pa_insertaproducto", p); 
en el debug linea a linea llego a "tabla" pero al intentar seguir BANG!
al catch directamente con el mensaje maldito =(


y tabla llega como null

Última edición por Panshop; 11/02/2010 a las 08:46
  #15 (permalink)  
Antiguo 11/02/2010, 09:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Perfecto, pero no me queda claro qué sentencias de AccesoDatos.EjecutaQueryOracleTran llega a ejecutar antes de devolver una tabla vacía.
El ejemplo que me pones es el mismo del inicio, y el problema, a mi entender no está en ese segmento, sino en el código interno del método que devuelve la tabla. Es allí donde hay que poner ese tray/catch controlando la OracleException.
Entendamos que por una cuestión de claridad, debes poner primero el catch para la OracleException y luego para una Exception. Pon un stop en las dos y debuggea para ver en cuál y en qué línea del método AccesoDatos.EjecutaQueryOracleTran deja de ejecutar.
Por fuera del método, la cosa no es.

¿El código de .EjecutaQueryOracleTran es demasiado largo para postearlo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 11/02/2010, 09:27
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

Código:
public DataTable EjecutaQueryOracleTran(string strNombreProcedimiento, OracleParameter[] Oracleparameters)
{    

            try
            {
                string strOracle = strNombreProcedimiento;

                ds = new DataSet();
                BDOracle();
                Oracleadap = new OracleDataAdapter();
                Oraclecmd = new OracleCommand();
                Oraclecmd.Connection = Oraclecon;
                Oraclecmd.Transaction = Transaccion;
                Oraclecmd.CommandText = strNombreProcedimiento;
                Oraclecmd.CommandType = CommandType.StoredProcedure;

                if (Oracleparameters != null)
                {
                    foreach (OracleParameter Oracleparam in Oracleparameters)
                    {
                        Oraclecmd.Parameters.Add(Oracleparam);
                    }
                }

                Oracleadap.SelectCommand = Oraclecmd;
                Oracleadap.Fill(ds);

                if (ds != null)
                    return ds.Tables[0];
                else
                    return null;
            }
            catch (OracleException e)
            {
                EscribeError(e.Message, e.Message, strNombreProcedimiento, "Programa);
                throw new Exception(e.Message, e);
            }
            catch (InvalidOperationException e)
            {
                EscribeError("0", e.Message, strNombreProcedimiento, "Programa");
                throw new Exception(e.Message, e);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
}
ese es el codigo del ejecuta.... se cae al tratar de seguir desde la linea marcada con rojo al debuguear linea por linea y baja directamente al marcado con verde

Última edición por Panshop; 11/02/2010 a las 09:55
  #17 (permalink)  
Antiguo 11/02/2010, 10:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Bien. Eso devela un misterio: El problema está en el nivel de código de la , y no en el procedure en sí, o de lo contrario saltaría al OracleException.

Por lo que podemos saber:
- Los parámetros están entrando bien.
- La creación del OracleCommand está bien.
- El problema se halla en que no puede recuperar una tabla con esa llamada...

Por lo que puedo leer de la documentación y de los ejemplos que has puesto (tu me dirás si estoy equivocado), parece que lo que debe devolver el procedure de Oracle es un Cursor, y no un DataSet o DataTable (a menos que la última sentencia fuese un SELECT), y esto es un problema porque el Método OracleDataAdapter.Fill() no puede devolver un cursor sino alguno de los otros dos objetos. Según MSDN, un cursor puede ser devuelto por un OracleDataReader, y en ese caso ese Cursor puede ser usado para cargar un DataSet como segundo parámetro de un OracleDataAdapter.Fill(DataSet, IDataReader).

Es posible que todo el problema resida allí, en que lo que está retornando el procedure no es lo que el OracleDataAdapter está esperando y eso impide todo el asunto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 11/02/2010, 10:25
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

de hecho en el procedimiento hace un select count para ver si el producto existe lo modifique en caso que el count sea 1, y si el procedimiento está devolviendo un numero 1 o 2, y ese numero se almacena debajo del dataset "tabla" despues de haber pasado por ella
Código:
AccesoDatos = new clsADAccesoDatosOracle();

AccesoDatos.IniciaTran();

tabla = AccesoDatos.EjecutaQueryOracleTran("PKG_P.pa_insertaproducto", p);

respuesta = Convert.ToInt32(tabla.Rows[0].ItemArray[0].ToString()); //esta determina si continúa el proceso o rechaza el trans
  #19 (permalink)  
Antiguo 11/02/2010, 10:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

¿Está considerada la posibilidad en el stored procedure que la respuesta sea NULL?

Es decir, ¿en el cuerpo del SP la última sentencia es un SELECT que no puede devolver un NULL?

Porque el problema se está dando precisamente en ese punto: El SP está devolviendo un valor ilegal (DBnull), que el OracleDataAdapter no puede aceptar. De allí el error...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 11/02/2010, 10:42
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

te muestro el sp
Código:
procedure pa_insertaproducto(parametros , param_salida in out t_cursor_salida) 
IS
    contarProdServ integer;
  BEGIN
    SELECT count(*)
      into contarProdServ

      FROM tabla
     WHERE cod_comercio = param_cod_comercio
       AND sku_producto = param_sku_producto;
    IF (contarProdServ = 0) THEN
      INSERT INTO tabla
        campos
      VALUES
        parametros
      open param_salida for
        select 1 from dual;
    
    ELSE
      UPDATE tabla
         SET campos = parametros
       WHERE cod_comercio = param_cod_comercio
         AND sku_producto = param_sku_producto;
    
      open param_salida for
        select 2 from dual;
    END IF;
  
  EXCEPTION
    WHEN OTHERS THEN
      open param_salida for
        select -1 from dual;
      rollback;
      raise;
  END;
y bueno, el cursor devuelve un int en este caso el null sería -1
  #21 (permalink)  
Antiguo 11/02/2010, 12:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Mi PL/SQL está un poco anquilosado, pero a mi entender el problema es el hecho de recibir un dato que no puede manejar, por lo que no puede crear una instancia de DataSet al hacerlo.

Yo sostengo que deberías hacer una prueba simple: En lugar de invocar un OracleDataAdapter, usa un OracleDataReader y usa el resultado de esa lectura.
Si lo que necesitas es un valor numérico, no tiene ninguna utilidad tratar de leerlo en una tabla. SI el caso resulta entonces el problema es ese. Al menos, la mayoría de los ejemplos que encuentro para el caso usan un DataReader y no un DataAdapter para recuperar un valor como ese.

Pruebalo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 11/02/2010, 12:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Se me ocurre una nimiedad, pero me pregunto si no será parte del problema...
Lo que me ha sucedido en otros DBMS es que la sentencia SELECT debe ser la última..., así que yo probaría:
Código SQL:
Ver original
  1. PROCEDURE pa_insertaproducto(parametros , param_salida IN OUT t_cursor_salida)
  2. IS
  3.     contarProdServ INTEGER;
  4.   BEGIN
  5.     SELECT COUNT(*)
  6.       INTO contarProdServ
  7.  
  8.       FROM tabla
  9.      WHERE cod_comercio = param_cod_comercio
  10.        AND sku_producto = param_sku_producto;
  11.     IF (contarProdServ = 0) THEN
  12.       INSERT INTO tabla
  13.         campos
  14.       VALUES
  15.         parametros
  16.       OPEN param_salida FOR
  17.         SELECT 1 FROM dual;
  18.    
  19.     ELSE
  20.       UPDATE tabla
  21.          SET campos = parametros
  22.        WHERE cod_comercio = param_cod_comercio
  23.          AND sku_producto = param_sku_producto;
  24.    
  25.       OPEN param_salida FOR
  26.         SELECT 2 FROM dual;
  27.     END IF;
  28.  
  29.   EXCEPTION
  30.     WHEN OTHERS THEN
  31.       ROLLBACK;
  32.       OPEN param_salida FOR
  33.         SELECT -1 FROM dual;
  34.   END;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 11/02/2010, 12:54
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

probando ambas opciones...
  #24 (permalink)  
Antiguo 11/02/2010, 13:05
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

el del SP no sirvio, probare el OracleDataReader
  #25 (permalink)  
Antiguo 11/02/2010, 13:14
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

mmm tengo un poco de problemas con el datareader, no c utilizarlo (soy estudiante) y tengo que estudiarmelo para poder aplicarlo
me podrias guiar un poco en como cambiar el metodo ya hecho?
  #26 (permalink)  
Antiguo 11/02/2010, 13:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Bueno, en realidad lo mejor en ese caso es que vayamos a las fuentes: MSDN (OracleDataReader (Clase))
Al menos es lo que yo hago cuando necesito códigos de prueba, y los que ponen siempre me han funcionado:
Cita:
En este ejemplo de C# se crea una tabla de Oracle, que se carga con datos. Debe ejecutar este ejemplo antes de ejecutar el siguiente, en el que se muestra cómo utilizar OracleDataReader para tener acceso a los datos mediante estructuras OracleType.
Código C#.net:
Ver original
  1. public void Setup(string connectionString)
  2. {
  3.    OracleConnection connection = new OracleConnection(connectionString);
  4.    try
  5.    {
  6.       connection.Open();
  7.       OracleCommand command = connection.CreateCommand();
  8.       command.CommandText ="CREATE TABLE OracleTypesTable (MyVarchar2 varchar2(3000),MyNumber number(28,4) PRIMARY KEY,MyDate date, MyRaw raw(255))";
  9.       command.ExecuteNonQuery();
  10.       command.CommandText ="INSERT INTO OracleTypesTable VALUES ('test', 2, to_date('2000-01-11 12:54:01','yyyy-mm-dd hh24:mi:ss'), '0001020304')";
  11.       command.ExecuteNonQuery();
  12.       command.CommandText="SELECT * FROM OracleTypesTable";
  13.    }
  14.    catch(Exception)
  15.    {
  16.    }
  17.    finally
  18.    {
  19.       connection.Close();
  20.    }
  21. }
En este ejemplo de C# se utiliza un objeto OracleDataReader para obtener acceso a los datos y se usan varias estructuras OracleType para mostrar los datos.

Código C#.net:
Ver original
  1. public void ReadOracleTypesExample(string connectionString)
  2. {
  3.    OracleConnection connection = new OracleConnection(connectionString);
  4.    connection.Open();
  5.    OracleCommand command = connection.CreateCommand();
  6.    try
  7.    {
  8.       command.CommandText = "SELECT * FROM OracleTypesTable";
  9.       OracleDataReader reader = command.ExecuteReader();
  10.       reader.Read();
  11.       //Using the Oracle specific getters for each type is faster than
  12.       //using GetOracleValue.
  13.       //First column, MyVarchar2, is a VARCHAR2 data type in Oracle Server
  14.       //and maps to OracleString.
  15.       OracleString oraclestring1 = reader.GetOracleString(0);
  16.       Console.WriteLine("OracleString " + oraclestring1.ToString());
  17.  
  18.       //Second column, MyNumber, is a NUMBER data type in Oracle Server
  19.       //and maps to OracleNumber.
  20.       OracleNumber oraclenumber1 = reader.GetOracleNumber(1);
  21.       Console.WriteLine("OracleNumber " + oraclenumber1.ToString());
  22.  
  23.       //Third column, MyDate, is a DATA data type in Oracle Server
  24.       //and maps to OracleDateTime.
  25.       OracleDateTime oracledatetime1 = reader.GetOracleDateTime(2);
  26.       Console.WriteLine("OracleDateTime " + oracledatetime1.ToString());
  27.  
  28.       //Fourth column, MyRaw, is a RAW data type in Oracle Server and
  29.       //maps to OracleBinary.
  30.       OracleBinary oraclebinary1 = reader.GetOracleBinary(3);
  31.  
  32.       //Calling value on a null OracleBinary throws
  33.       //OracleNullValueException; therefore, check for a null value.
  34.       if (oraclebinary1.IsNull==false)
  35.       {
  36.          foreach(byte b in oraclebinary1.Value)
  37.          {
  38.             Console.WriteLine("byte " + b.ToString());
  39.          }
  40.       }
  41.       reader.Close();
  42.    }
  43.    catch(Exception e)
  44.    {
  45.       Console.WriteLine(e.ToString());
  46.    }
  47.    finally
  48.    {
  49.       connection.Close();
  50.    }
  51. }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #27 (permalink)  
Antiguo 11/02/2010, 13:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Creo que este link es mejor: Accessing Oracle 9i Stored Procedures Using ADO.NET
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 11/02/2010, 14:16
 
Fecha de Ingreso: febrero-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: O.o que pasa aqui ?

p[x] = new OracleParameter("param_imagen_producto", OracleType.Blob);
p[x].Value = ENTIDAD.Imagen_producto;
if (ENTIDAD.Imagen_producto == null)
p[x].Direction = ParameterDirection.InputOutput;


LoL

Última edición por TBURON; 11/02/2010 a las 14:16 Razón: LoL
  #29 (permalink)  
Antiguo 11/02/2010, 14:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: O.o que pasa aqui ?

Tburon: ¿Entonces, es un problema de parámetros?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #30 (permalink)  
Antiguo 11/02/2010, 14:28
Avatar de Panshop  
Fecha de Ingreso: abril-2009
Ubicación: Santiago
Mensajes: 87
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: O.o que pasa aqui ?

OMG
y ese fue el asunto >.>

gracias tburon =)

gracias gnzsoloyo por tu atencion y apoyo ;) ahora funciona bien

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:54.