C# 非常奇怪的iSeries提供程序行为

C# 非常奇怪的iSeries提供程序行为,c#,.net,ibm-midrange,rpg,C#,.net,Ibm Midrange,Rpg,我们的RPG人员给了我们一个“存储过程”,返回六个数据表。尝试使用.NET的iSeries提供程序从.NET(C#,3.5)调用它(尝试使用V5R4和V6R1),根据调用存储过程的方式,我们看到了不同的结果。以下是我们更愿意采用的方法: using (var dbConnection = new iDB2Connection("connectionString")) { dbConnection.Open(); using(var cmd = dbConnection.Creat

我们的RPG人员给了我们一个“存储过程”,返回六个数据表。尝试使用.NET的iSeries提供程序从.NET(C#,3.5)调用它(尝试使用V5R4和V6R1),根据调用存储过程的方式,我们看到了不同的结果。以下是我们更愿意采用的方法:

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。

查看连接字符串的LibraryList(可能还有命名)属性。使用CommandType.StoredProcedure时,它可能正从SQL数据库库执行存储过程。使用CommandType.Text时,它会搜索库列表以查找存储过程。您最终会从不同的库运行不同版本的存储过程,从而得到不同的结果。

查看连接字符串的LibraryList(可能还有命名)属性。使用CommandType.StoredProcedure时,它可能正从SQL数据库库执行存储过程。使用CommandType.Text时,它会搜索库列表以查找存储过程。您最终会从不同的库运行不同版本的存储过程,从而得到不同的结果。

谢谢!我们并没有体验到这一点,但这绝对是值得注意的,值得注意。谢谢!我们并没有体验到这一点,但这绝对是一件值得注意和注意的事情。