Вопрос

Нам дали «сохраненную процедуру» от наших рельсов RPG, которые возвращают шесть таблиц данных. Попытка вызвать его от .NET (C #, 3.5) с использованием провайдера ISERIES для .NET (попробовал с использованием как V5R4, так и V6R1), мы видим разные результаты, основанные на том, как мы называем сохраненные ProC. Вот способ, которым мы предпочли это сделать:

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

Делать это таким образом, мы получаем ПЯТЬ Таблицы обратно в набор результатов. Однако, если мы сделаем это:

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

Мы вернемся к ожидаемую ШЕСТЬ таблицы.

Я понимаю, что не так много из нас извините .net-to-db2 люди здесь, но я надеюсь, что кто-то видел это раньше.

TIA.

Это было полезно?

Решение

Посмотрите в библиотеку (и, возможно, называемое) свойство вашей подключения строки. Когда вы используете CommandType.storedProcedure, он может быть выполнен сохраненной процедурой прямо из библиотеки базы данных SQL. Когда вы используете CommandType.text, он ищет список библиотеки, чтобы найти хранимую процедуру. Вы в конечном итоге работают разные версии хранимой процедуры из разных библиотек, которые дают вам разные результаты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top