我们的RPG人士已经获得了一个“存储过程”,以返回六个数据表。尝试使用.NET的iSeries提供商(同时使用V5R4和V6R1)从.NET(C#,3.5)调用它,我们根据如何称呼存储的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