ここでは、OleDbConnection を使用してAS400(DB2)に接続してクエリを発行するサンプルプログラムを掲載しています。
スポンサーリンク
AS400(DB2)に接続してSQLを発行するサンプル
実際のサンプルプログラムは以下の通りです。本サンプルではプロバイダに IBMDA400 を使用していますが、他には IBMDASQL、 IBMDARLA もあるようです(いまいちさっぱり意味がわかりませんが)。なお、サンプルプログラム内のコメントも参照ください。
using System.Data.OleDb;
using System.Data;
static void Main(string[] args)
{
// 接続文字列:Provider以外は環境に合わせて変更する
string connStr = @"Provider=IBMDA400;Data Source=ds;User ID=userid;Password=passwd;";
OleDatabase db = new OleDatabase(connStr);
// DB2 に接続
db.Connect();
db.GetCommand(@"select col1, col2 from table1");
// クエリーを発行して、結果をDataSetで受け取る
DataSet ds = db.FillQuery();
DataTable dt;
dt = ds.Tables[0];
// 全レコードを出力
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["col1"].ToString());
Console.WriteLine(dr["col2"].ToString());
}
// データベース切断
db.Close();
}
public class OleDatabase
{
protected string ConnectString { set; get; }
protected OleDbConnection Conn = null;
protected OleDbCommand Cmd = null;
protected OleDbTransaction Tran = null;
public Database() { }
public Database(string connStr)
{
ConnectString = connStr;
}
// トランザクション開始
public void BeginTransaction()
{
Tran = Conn.BeginTransaction();
}
// コミット
public void Commit()
{
Tran?.Commit();
Tran = null;
}
// ロールバック
public void Rollback()
{
Tran?.Rollback();
Tran = null;
}
// DB2に接続
public void Connect()
{
Conn = new OleDbConnection(ConnectString);
Conn.Open();
}
// コマンド作成
// バインドするときは?を使用する
// 例)select * from table1 where col1 = ? and col2 = ?
public void GetCommand(string sql)
{
Cmd = new OleDbCommand(sql, Conn);
if(this.Tran != null)
{
// トランザクション中はOleDbTransactionを設定する必要あり
Cmd.Transaction = this.Tran;
}
}
// パラメータを設定
// SQLにバインド変数が与えられていた場合に使用する
// パラメータはバインド変数(?)の順番通りに設定する
public void SetParam(string name, OleDbType type, Object value)
{
OleDbParameter prm = new OleDbParameter(name, type);
prm.Value = value;
Cmd.Parameters.Add(prm);
}
// SQL(クエリ)を発行し、結果をDataSetで返す
public DataSet FillQuery()
{
OleDbDataAdapter da = new OleDbDataAdapter();
DataSet ds = new DataSet();
da.SelectCommand = Cmd;
da.Fill(ds);
return ds;
}
// 結果を返さないSQLを発行
public void Execute(string sql)
{
Cmd.ExecuteNonQuery();
}
// データベースから切断
public void Close()
{
Conn?.Close();
Conn = null;
}
}