Frage

Wir haben Tabellen einen „Stored Procedure“ von unseren RPG Leuten gegeben, dass die Renditen sechs Daten. Der Versuch, es zu nennen von .NET (C #, 3.5) für .NET den iSeries-Provider verwendet (versucht sowohl V5R4 und V6R1 verwenden), sehen wir unterschiedliche Ergebnisse basierend darauf, wie wir die gespeicherte Prozedur aufrufen. Hier Weg, dass wir es vorziehen, es zu tun:

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

es auf diese Weise tun, erhalten wir FIVE Tabellen in der Ergebnismenge zurück. Wenn wir jedoch dies tun:

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

Wir die erwartet zurückkommen SIX Tabellen.

Ich weiß, dass es nicht viele von uns leider .NET-to-DB2 Leute hier, aber ich bin der Hoffnung, jemand gesehen hat dies vor.

TIA.

War es hilfreich?

Lösung

Blick in die LibraryList (und vielleicht auch die Namensgebung) Eigentum Ihrer Verbindungszeichenfolge. Wenn Sie CommandType.StoredProcedure verwenden könnte es die gespeicherte Prozedur direkt aus der SQL-Datenbankbibliothek Ausführung sein. Wenn Sie CommandType.Text verwenden sucht es die Bibliothek Liste der gespeicherten Prozedur zu finden. Sie enden verschiedene Versionen der gespeicherten Prozedur aus verschiedenen Bibliotheken angerannt, die Sie unterschiedliche Ergebnisse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top