更新: 以下のコード例は機能します。接続文字列を変更しました。それが問題でした。別の (ADO 以外の) ソリューションについては、コメント内の Mike Wills のリンクを参照してください。
AS/400 - JD Edwards で RPG コードで書かれたプログラムを実行する ac# クラスがあります。AS/400 や JD Edwards についてはほとんど何も知りません。
私の (イントラネット) Web アプリには、JD Edwards に接続し、SQL クエリを実行し、データを設定/取得する他のクラスがあります。これらはすべて IBM.Data.DB2.iSeries dll を使用しており、うまく機能しています。
このために、前述の dll を使用して同様のクラスを作成しましたが、機能しませんでした。このdllを使用してプログラムを実行できないことをオンラインのどこかで読んだことさえあります。少し怪しいと思いましたが、JD Edwards の同僚からの提案で、クラスを廃棄し、adodb dll を使用して書き直しました。このプログラムの実行からデータを返す必要はありません。プログラムを実行したいだけです。
クラスのダミー バージョンを次に示します。
private void runJDEProgram() {
ADODB.Connection cn = new ADODB.Connection();
cn.ConnectionString = "Provider=ABABAB;Data Source=111.111.111";
ADODB.Command cmdDetail = new ADODB.Command();
cn.Open(); //has to be open before setting an active connection.
cmdDetail.ActiveConnection=cn;
cmdDetail.CommandType = ADODB.CommandTypeEnum.adCmdText;
cmdDetail.CommandText = "{{CALL BLAH.BLAH(?,?)}}";
cmdDetail.Prepared = true;
cmdDetail.Parameters.Append(cmdDetail.CreateParameter("P1", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 10, "BLAH123"));
cmdDetail.Parameters.Append(cmdDetail.CreateParameter("P2", ADODB.DataTypeEnum.adChar, ADODB.ParameterDirectionEnum.adParamInput, 10, "BLAH456"));
object dummy = Type.Missing; //otherwise, we couldn't get past this.
cmdDetail.Execute(out dummy, ref dummy, 0);
cn.Close();
}
実行時に表示されるエラーは次のとおりです。
{"[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"}
私はどこを台無しにしていますか?ありがとう!
編集: 接続文字列は、AS/400 にクエリを実行してデータを取得/設定するときに機能します。このような操作や ADO で使用するために変更する必要がありますか?