sql >> Database teknologi >  >> RDS >> Oracle

Fejl ved hentning ud af rækkefølge, der returnerer tabel fra Oracle-funktion i C#, hvor funktionen bruger dblink til SQL Server

Efter at have brugt mere end en dag på at undersøge dette blev jeg henvist til svaret kun 10 minutter efter at have sendt mit spørgsmål. Typisk!

Svaret blev fundet her - https://community.oracle.com/thread/659625 - og det eneste, der kræves, er at indpakke kaldekoden i en transaktion. Arbejdskoden ser sådan ud:

using (var connection = new OracleConnection(connstring))
{
    connection.Open();

    using (var command = connection.CreateCommand())
    {
        // Start a local transaction
        using (var transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted))
        {
            // Assign transaction object for a pending local transaction
            command.Transaction = transaction;
            command.CommandText = "FNC_AXA_APPTS";
            command.CommandType = CommandType.StoredProcedure;

            OracleParameter retVal = new OracleParameter("PRS", OracleDbType.RefCursor);
            retVal.Direction = ParameterDirection.ReturnValue;
            command.Parameters.Add(retVal);

            command.Parameters.Add(new OracleParameter("EG_PARAM", OracleDbType.Varchar2, 50)).Value = paramValue;

            command.ExecuteNonQuery();

            using (OracleDataReader reader = ((OracleRefCursor)command.Parameters["PRS"].Value).GetDataReader())
            {
                dt.Load(reader);
            }
        }
    }
}

Min begrænsede forståelse af løsningen er, at uden denne foretages en transaktion i SQL Server-enden, hvilket får den returnerede markør til at fejle i sin iteration, når den først er overført til .NET-koden. Hvis nogen har en bedre forklaring, bedes du tilføje dette spørgsmål.



  1. Sådan gemmer du en streng, der indeholder enkelte anførselstegn, i en tekstkolonne i PostgreSQL

  2. få data fra flere tabeller i MySQL med forskellige betingelser

  3. Sikkerhedskopier/eksportér en database fra SSH

  4. Får MySQL-fejlstaksporing på Oracle JDBC-forbindelse