Unable to cast object of type 'CoreLab.Oracle.a6' to type 'CoreLab.Oracle.OracleCursor'.

Discussion of open issues, suggestions and bugs regarding ADO.NET provider for Oracle
Post Reply
cidico
Posts: 2
Joined: Wed 19 Dec 2007 14:07

Unable to cast object of type 'CoreLab.Oracle.a6' to type 'CoreLab.Oracle.OracleCursor'.

Post by cidico » Tue 22 Jan 2008 20:37

When trying to execute the following code I got this exception:
Unable to cast object of type 'CoreLab.Oracle.a6' to type 'CoreLab.Oracle.OracleCursor'.

Why?

Here's my code:

Code: Select all

StringBuilder sql = new StringBuilder();

            sql.AppendLine("SELECT CLG.CLG_ID");
            sql.AppendLine("     , JRD.JRD_ID");
            sql.AppendLine("     , JRD.JRD_CNPJ");
            sql.AppendLine("     , JRD.JRD_FRN");
            sql.AppendLine("     , JRD.JRD_CLN");
            sql.AppendLine("     , JRD.JRD_AGT");
            sql.AppendLine("     , JRD.JRD_PRS");
            sql.AppendLine("     , JRD.JRD_TPT");
            sql.AppendLine("     , OBSJRD.JRDOBS_OBS");
            sql.AppendLine("     , LOGO.LG_PATH");
            sql.AppendLine("     , PSS.PSS_ID");
            sql.AppendLine("     , PSS.PSS_CODSISCOMEX");
            sql.AppendLine("     , PSS.PSS_DESCPAIS");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_FN_FX FNFX");
            sql.AppendLine("                WHERE FNFX.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND FNFX.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND FNFX.JRD_CNPJ = :JRDCNPJ ) AS FONESFAX");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_INS_EST EST");
            sql.AppendLine("                WHERE EST.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND EST.JRD_ID = :IDJRD ) AS INSCEST");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_INS_SFR SFR");
            sql.AppendLine("                WHERE SFR.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND SFR.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND SFR.JRD_CNPJ = :JRDCNPJ ) AS INSCSFR");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_END ENDE");
            sql.AppendLine("                WHERE ENDE.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND ENDE.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND ENDE.JRD_CNPJ = :JRDCNPJ ) AS ENDERECOS");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_CTT CTT");
            sql.AppendLine("                WHERE CTT.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND CTT.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND CTT.JRD_CNPJ = :JRDCNPJ ) AS CTTS");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_CTT_FN_FX CTTFNFX");
            sql.AppendLine("                WHERE CTTFNFX.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND CTTFNFX.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND CTTFNFX.JRD_CNPJ = :JRDCNPJ ) AS CTTFNFX");
            sql.AppendLine("     , CURSOR( SELECT CTTEND.*");
            sql.AppendLine("                    , EST.EST_ID");
            sql.AppendLine("                    , EST.EST_NOMELOCAL");
            sql.AppendLine("                 FROM TB_JRD_CTT_END CTTEND");
            sql.AppendLine("                    , TB_EST EST");
            sql.AppendLine("                WHERE CTTEND.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND CTTEND.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND CTTEND.JRD_CNPJ = :JRDCNPJ ) AS CTTENDS");
            sql.AppendLine("     , CURSOR( SELECT *");
            sql.AppendLine("                 FROM TB_JRD_CTT_ENV_EML CTTEML");
            sql.AppendLine("                WHERE CTTEML.CLG_ID = :IDCLG");
            sql.AppendLine("                  AND CTTEML.JRD_ID = :IDJRD");
            sql.AppendLine("                  AND CTTEML.JRD_CNPJ = :JRDCNPJ ) AS CTTEML");
            sql.AppendLine("  FROM TB_CLG CLG");
            sql.AppendLine("     , TB_CLG_JRD JRD");
            sql.AppendLine("     , TB_PSS PSS");
            sql.AppendLine("     , TB_JRD_OBS OBSJRD");
            sql.AppendLine("     , TB_LOGO LOGO");
            sql.AppendLine("     , TB_JRD_CTT_OBS OBSCTT");
            sql.AppendLine(" WHERE CLG.CLG_ID = :IDCLG");
            sql.AppendLine("   AND JRD.CLG_ID = CLG.CLG_ID");
            sql.AppendLine("   AND JRD.JRD_ID = :IDJRD");
            sql.AppendLine("   AND JRD.JRD_CNPJ = :JRDCNPJ");
            sql.AppendLine("   AND JRD.CLG_ID = CLG.CLG_ID");
            sql.AppendLine("   AND PSS.PSS_ID = CLG.PSS_ID");
            sql.AppendLine("   AND OBSJRD.JRD_ID(+) = JRD.JRD_ID");
            sql.AppendLine("   AND OBSJRD.CLG_ID(+) = JRD.CLG_ID");
            sql.AppendLine("   AND OBSJRD.JRD_CNPJ(+) = JRD.JRD_CNPJ");
            sql.AppendLine("   AND LOGO.JRD_ID(+) = JRD.JRD_ID");
            sql.AppendLine("   AND LOGO.CLG_ID(+) = JRD.CLG_ID");
            sql.AppendLine("   AND LOGO.JRD_CNPJ(+) = JRD.JRD_CNPJ");
            sql.AppendLine("   AND OBSCTT.JRD_ID(+) = JRD.JRD_ID");
            sql.AppendLine("   AND OBSCTT.CLG_ID(+) = JRD.CLG_ID");
            sql.AppendLine("   AND OBSCTT.JRD_CNPJ(+) = JRD.JRD_CNPJ");

            OracleCommand cmd = new OracleCommand();

            sessao = new Sessao(true);

            cmd.CommandText = sql.ToString();
            cmd.Connection = sessao.Conexao;

            cmd.Parameters.Add(new OracleParameter("IDCLG", OracleDbType.Number));
            cmd.Parameters.Add(new OracleParameter("IDJRD", OracleDbType.Number));
            cmd.Parameters.Add(new OracleParameter("JRDCNPJ", OracleDbType.VarChar));

            cmd.Parameters["IDCLG"].Value = 347;
            cmd.Parameters["IDJRD"].Value = 223;
            cmd.Parameters["JRDCNPJ"].Value = "12312312312311";

            OracleDataReader reader = cmd.ExecuteReader();
            OracleCursor curs;

            reader.Read();
            // curs = reader[13] as OracleCursor;
            curs = (OracleCursor)reader[13];

            sessao.FecharConexao();
The 'sessao' objects is the handler of my OracleConnection and OracleTransaction...

Why can't I cast my reader's column to OracleCursor, since it IS a cursor?!


Thanks in advance![/b]

Alexey.mdr
Posts: 729
Joined: Thu 13 Dec 2007 10:24

Post by Alexey.mdr » Wed 23 Jan 2008 11:05

This bug will be fixed in the next build.
Meanwhile use:

Code: Select all

curs = reader.GetOracleValue(13);
Instead of:
curs =(OracleCursor)reader[13];

Post Reply