非常奇怪的iSeries Provider行为

时间:2010-04-22 15:09:19

标签: c# .net ibm-midrange rpg

我们已经从我们的RPG人员那里获得了一个“存储过程”,它返回六个数据表。尝试使用iSeries Provider for .NET(使用V5R4和V6R1尝试)从.NET(C#,3.5)调用它,我们看到基于我们如何调用存储过程的不同结果。这是我们更喜欢这样做的方式:

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 + "')";

我们取回预期的 SIX 表。

我意识到我们这里没有很多人抱歉.NET-to-DB2人员,但我希望有人之前见过这个。

TIA。

1 个答案:

答案 0 :(得分:1)

查看连接字符串的LibraryList(可能是Naming)属性。当您使用CommandType.StoredProcedure时,它可以直接从SQL数据库库执行存储过程。使用CommandType.Text时,它会搜索库列表以查找存储过程。您最终会从不同的库中运行不同版本的存储过程,从而为您提供不同的结果。