Pregunta

Se nos ha dado un "procedimiento almacenado" de nuestra gente de rol que devuelve seis tablas de datos. El intento de llamarlo desde .NET (C #, 3.5) mediante el proveedor de iSeries para .NET (intentado usar tanto V5R4 y V6R1), estamos viendo diferentes resultados en función de la forma en que llamamos el procedimiento almacenado. de aquí que la forma en que prefiere hacerlo:

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

Hacerlo de esta manera, obtenemos CINCO mesas de vuelta en el conjunto de resultados. Sin embargo, si hacemos esto:

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

volvamos la espera SEIS mesas.

Me doy cuenta de que no hay muchos de nosotros lo siento gente por aquí-NET-a DB2, pero estoy esperando que alguien ha visto esto antes.

TIA.

¿Fue útil?

Solución

Mire en el interior LibraryList (y tal vez la asignación de nombres) Propiedad de la cadena de conexión. Cuando se utiliza CommandType.StoredProcedure podría ser ejecutar el procedimiento almacenado derecha de la biblioteca de base de datos SQL. Cuando se utiliza CommandType.Text que busca en la lista de bibliotecas para encontrar el procedimiento almacenado. Se termina ejecutar diferentes versiones del procedimiento almacenado de diferentes bibliotecas que le da resultados diferentes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top