Question

Nous avons été donné une « procédure stockée » de nos gens de RPG qui retourne six tables de données. Toute tentative de l'appeler de .NET (C #, 3.5) en utilisant le fournisseur iSeries pour .NET (utilisant à la fois essayé V5R4 et V6R1), nous voyons des résultats différents en fonction de la façon dont nous appelons la procédure stockée. la manière de là que nous préférons le faire:

using (var dbConnection = new iDB2Connection("connectionString"))
{
    dbConnection.Open();
    using(var cmd = dbConnection.CreateCommand())
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "StoredProcName";
        cmd.Parameters.Add(new iDB2Parameter("InParm1", 
            iDB2DbType.Varchar).Value = thing;
        var ds = new DataSet();
        var da = new iDB2DataAdapter(cmd);
        da.Fill(ds);
    }
}

En procédant ainsi, nous obtenons Cinq tables retour dans le jeu de résultats. Cependant, si nous faisons cela:

cmd.CommandType = CommandType.Text;
cmd.CommandText = "CALL StoredProcName('" + thing + "')";

Nous reprenons l'ordre de SIX tables.

Je me rends compte qu'il n'y a pas beaucoup d'entre nous sorry ici, .NET à DB2 les gens, mais je suis en espérant que quelqu'un a vu cela auparavant.

TIA.

Était-ce utile?

La solution

Regardez dans l'LibraryList (et peut-être le Naming) propriété de votre chaîne de connexion. Lorsque vous utilisez CommandType.StoredProcedure il pourrait être exécuter le droit de procédure stockée dans la bibliothèque de base de données SQL. Lorsque vous utilisez CommandType.Text il recherche la liste des bibliothèques pour trouver la procédure stockée. Vous finissez par utiliser différentes versions de la procédure stockée dans différentes bibliothèques qui vous donne des résultats différents.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top