SQLを使用してAS400データベースを照会する.NET Webアプリケーションを構築しようとしています。 AS400に出会ったのはこれが初めてです。
接続するには、マシン(またはAS400サーバー)に何をインストールする必要がありますか? (IBM iSeries Access for Windows ??)
接続文字列のコンポーネントは何ですか?
SQLコマンドを使用してデータアクセス層を構築するサンプルコードはどこにありますか?
ありがとう。
AS400 .Netデータプロバイダーが必要です。ここで確認してください: https://www-01.ibm.com/support/docview.wss?uid=isg3T102716
接続文字列のサンプルについては、こちらを確認してください: https://www.connectionstrings.com/as-400/
また、コード例と使用開始についてはレッドブックをご覧ください。 http://www.redbooks.ibm.com/redbooks/pdfs/sg246440.pdf
以下は私が問題を解決するためにしたことです。
IBM i Access for Windows
をインストールしました。空いてない
プロジェクト内の次のdllを参照しました
データアクセス
using (iDB2Command command = new iDB2Command())
{
command.Connection = (iDB2Connection)_connection;
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue(Constants.ParamInterfaceTransactionNo, 1);
command.CommandText = dynamicInsertString;
command.ExecuteScalar();
}
接続文字列
<add name="InterfaceConnection"
connectionString="Data Source=myserver.mycompany.com;User ID=idbname;Password=mypassxxx;
Default Collection=ASIPTA;Naming=System"/>
[〜#〜] update [〜#〜]
i Windows 8.1以降のオペレーティングシステム上のWindowsのAccessはサポートされない場合があります。交換製品IBM i Access Client Solutionsをお試しください
他の回答で述べたように、IBM i Accessクライアントが既にインストールされている場合、IBM.Data.DB2.iSeriesパッケージを使用できます。
IBM i Accessソフトウェアがない場合は、 JTOpen を利用してJavaドライバーを使用できます。nugetパッケージが必要です JT400 .78 IKVMランタイムをプルします。
私の場合、AS400上のDB2データベースを照会し、DataTableを出力する必要がありました。いくつかのヒントとコードの小さな断片を見つけましたが、包括的なものは何もありませんでしたので、他の人に役立つ場合に備えて、構築できたものを共有したいと思いました:
using com.ibm.as400.access;
using Java.sql;
var sql = "SELECT * FROM FOO WITH UR";
DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
Connection conn = DriverManager.getConnection(
"jdbc:as400:" + ServerName + ";Prompt=false", UserName, Password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int ct = md.getColumnCount();
DataTable dt = new DataTable();
for(int i=1; i<=ct; i++)
dt.Columns.Add(md.getColumnName(i));
while (rs.next())
{
var dr = dt.NewRow();
for (int i = 1; i <= ct; i++)
dr[i - 1] = rs.getObject(i);
dt.Rows.Add(dr);
}
rs.close();
RecordSetからDataTableへの変換は少し不格好で、VBScriptの時代にひどいフラッシュバックを与えてくれました。パフォーマンスは目をくらませるほど高速ではありませんが、機能します。
非常に古い質問-しかし、これはまだ関連しています。 .NETを使用してAS/400にクエリを実行する必要がありましたが、上記の答えはどれも機能しなかったため、OleDbを使用して独自のメソッドを作成しました。
public DataSet query_iseries(string datasource, string query, string[] parameterName, string[] parameterValue)
{
try
{
// Open a new stream connection to the iSeries
using (var iseries_connection = new OleDbConnection(datasource))
{
// Create a new command
OleDbCommand command = new OleDbCommand(query, iseries_connection);
// Bind parameters to command query
if (parameterName.Count() >= 1)
{
for (int i = 0; i < parameterName.Count(); i++)
{
command.Parameters.AddWithValue("@" + parameterName[i], parameterValue[i]);
}
}
// Open the connection
iseries_connection.Open();
// Create a DataSet to hold the data
DataSet iseries_data = new DataSet();
// Create a data adapter to hold results of the executed command
using (OleDbDataAdapter data_adapter = new OleDbDataAdapter(command))
{
// Fill the data set with the results of the data adapter
data_adapter.Fill(iseries_data);
}
return iseries_data;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
そして、次のように使用します。
DataSet results = query_iseries("YOUR DATA SOURCE", "YOUR SQL QUERY", new string[] { "param_one", "param_two" }, new string[] { "param_one_value", "param_two_value"});
返された結果のDataSet
を返します。誰かがIBM AS/400内で値を挿入/更新する方法を必要とする/望んでいる場合、コメントを残して共有します...
最近、NuGetでADO.Netドライバーが利用できることを発見しました。 PCにiSeriesクライアントアクセスがインストールされているため、スタンドアロンとして機能するかどうかはわかりませんが、接続はできます。唯一の問題は、実際にテーブルやプロシージャが表示されないことです。スキーマやライブラリ、またはまだ理解していないものがあるかもしれません。答えが見つかったら投稿します。その間、私はまだサーバーにアクセスし、NuGetアダプターを使用してほとんどのコードを作成できます。
私はこのコードを使用しており、私にとって非常に良い仕事をしています!
Try
Dim sqltxt As String = "SELECT * FROM mplib.pfcarfib where LOTEF=" & My.Settings.loteproceso
dt1 = New DataTable
Dim ConAS400 As New OleDb.OleDbConnection
ConAS400.ConnectionString = "Provider=IBMDA400;" & _
"Data Source=192.168.100.100;" & _
"User ID=" & My.Settings.usuario & ";" & _
"Password=" & My.Settings.contrasena
Dim CmdAS400 As New OleDb.OleDbCommand(sqltxt, ConAS400)
Dim sqlAS400 As New OleDb.OleDbDataAdapter
sqlAS400.SelectCommand = CmdAS400
ConAS400.Open()
sqlAS400.Fill(dt1)
grid_detalle.DataSource = dt1
grid_detalle.DataMember = dt1.TableName
Catch ex As Exception
DevExpress.XtraEditors.XtraMessageBox.Show("Comunicación Con El AS400 No Establecida, Notifique a Informatica..", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.Close()
End Try