Domanda

C'è stata data una "stored procedure" da parte dei nostri ragazzi di RPG che restituisce sei tabelle di dati. Il tentativo di chiamare da NET (C #, 3.5) utilizzando il provider iSeries per .NET (provato utilizzando sia V5R4 e V6R1), stiamo assistendo a risultati diversi in base a come noi chiamiamo il proc memorizzato. Qui di modo che noi preferiremmo farlo:

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);
    }
}

Facendo in questo modo, si ottiene CINQUE tavoli indietro nel set di risultati. Tuttavia, se facciamo questo:

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

recuperare l'atteso SIX le tabelle.

Mi rendo conto che non ci sono molti di noi dispiace NET-to-DB2 gente qui fuori, ma sto sperando che qualcuno ha visto questo prima.

TIA.

È stato utile?

Soluzione

Cerca nel librarylist (e forse la denominazione) di proprietà della stringa di connessione. Quando si utilizza CommandType.StoredProcedure che potrebbe essere l'esecuzione della procedura giusta memorizzata dalla libreria di database SQL. Quando si utilizza CommandType.Text esso cerca l'elenco librerie per trovare la stored procedure. Si finisce con versioni diverse di stored procedure da diverse librerie che ti dà risultati diversi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top