2010-04-22 102 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