проблема с обработкой данных OracleDataReader (OracleRefCursor) - PullRequest
0 голосов
/ 16 ноября 2018

Мне нужна помощь, когда я получаю данные процедуры BD (Oracle).Я не знаю, как обращаться с типом данных date time, int и т. Д. Я знаю только, что делать со строками

public static Player_E getPlayer(string select)
    {
        Player_E player = new Player_E();
        DateTime? dateTime = new DateTime();

        conexion = bd.ConexionWithDB();

        orden.CommandText = "CONSULTAS.obtener_jugador";
        orden.CommandType = CommandType.StoredProcedure;
        orden.Parameters.Add("v_nombre", OracleDbType.Varchar2, 60).Value = select;
        orden.Parameters.Add("jugadores_dev", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);


        orden.Parameters.Add("c2blob", OracleDbType.Blob).Direction = ParameterDirection.Output;
        orden.Connection = conexion;

        orden.ExecuteNonQuery();

        OracleDataReader dr = ((OracleRefCursor)orden.Parameters["jugadores_dev"].Value).GetDataReader();


        dr.Read();
        //tbNombre.Text = dr["c1"].ToString();


        OracleBlob blob = (OracleBlob)orden.Parameters["c2blob"].Value;

        byte[] filedata = null;
        if (blob.Length != 0)
        {
            filedata = new byte[blob.Length];

        }

        //these are attempts that I have been making

        //dateTime = Convert.ToDateTime(dr["d1"].ToString());
        //dateTime = Convert.ToDateTime(dr.GetOrdinal("d1").ToString());
        //dateTime = dr["d1"].ToString().Length > 0 ? DateTime.Parse(dr["d1"].ToString()) : DateTime.MinValue;

        //dateTime = DateTime.ParseExact(dr["d1"].ToString(),"dd/MM/yyyy",System.Globalization.CultureInfo.CreateSpecificCulture("es-ES"));


        player = new Player_E (dr["c1"].ToString(), dr["c2"].ToString(), dr["c3"].ToString(), dateTime, dr["c4"].ToString(), filedata);

        //dr.Dispose();


        //orden.Dispose();
        conexion.Close();
        return player;
    }

Вот метод, в котором я вызываю для отправки объект Player со значениями.

Редактировать: это процедура:

ПРОЦЕДУРА OBTENER_JUGADOR (v_nombre VARCHAR2, est_jugador OUT estructura_devuelta, C2BLOB OUT BLOB)

IS
BEGIN
    INSERT INTO TMP_ESTRUCTURA (c1,
                                c2,
                                c3,
                                d1,
                                c4)
        SELECT NOMBRE,
               DIRECCION,
               PUESTO_HAB,
               FECHA_NAC,
               EQUIPO_JUGADOR
          FROM jugador
         WHERE nombre = v_nombre;


         SELECT FOTO_JUGADOR
         INTO C2BLOB
          FROM jugador
         WHERE nombre = v_nombre;


    OPEN est_jugador FOR SELECT * FROM TMP_ESTRUCTURA;
EXCEPTION
    WHEN OTHERS
    THEN
        raise_application_error (
            -20100,
            'El jugador ' || v_nombre || '  no existe' || SQLERRM);
END OBTENER_JUGADOR;

Спасибо всем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...