2010-04-22 55 views
1

我们已经从我们的RPG人员那里获得了一个“存储过程”,它返回了六个数据表。尝试使用iSeries Provider for .NET从.NET(C#,3.5)调用它(尝试使用V5R4和V6R1),我们看到了基于我们如何调用存储过程的不同结果。下面是办法,我们宁愿做:非常奇怪的iSeries Provider行为

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

这样做,这样,我们就得到FIVE表早在结果集。但是,如果我们这样做:

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

我们找回了预期SIX表。

我意识到我们中很多人都对不起.NET到DB2的人,但我希望以前有人看到过。

TIA。

回答

1

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

+0

谢谢!我们没有体验到这一点,但是这绝对是值得注意的事情,并且很好意识到。 – David 2010-12-14 14:38:26