1

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

我们得到了预期的张桌子。

我意识到我们当中没有多少人对不起 .NET-to-DB2 的人在这里,但我希望有人以前见过这个。

TIA。

4

1 回答 1

1

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

于 2010-05-22T11:19:57.647 回答