非常に奇妙なIseriesプロバイダーの行動
-
01-10-2019 - |
質問
6つのデータテーブルを返す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の人々はいないことを理解していますが、誰かがこれを見たことがあることを望んでいます。
ティア。
解決
接続文字列のライブラリリスト(およびおそらく命名)プロパティを調べてください。 commandType.storedProcedureを使用すると、SQLデータベースライブラリからストアドプロシージャを実行する可能性があります。 CommandType.Textを使用すると、ライブラリリストを検索してストアドプロシージャを見つけます。さまざまなライブラリからストアドプロシージャの異なるバージョンを実行することになり、さまざまな結果が得られます。
所属していません StackOverflow