Visual Studio .NET Beta 1 使用 ADO.NET ODBC 橋接器訪問 DB2;Beta 2 起轉向 OLE DB Provider for DB2,提供更豐富的資料存取介面(支援非關聯資料源、COM 標準、物件導向 API)。本文以 VS.NET Beta 2 + DB2 + Windows 2000 Server 為基準環境,演示完整開發流程。
DB2OLEDB Provider,可在「資料連結」屬性頁的 Provider 標籤中看到 Microsoft OLE DB Provider for DB2。| 屬性 | 範例值 | 說明 |
|---|---|---|
| Data Source | QCDB | DB2 目錄別名 |
| Network | TCP/IP | 通訊協定 |
| IP Address | 172.23.169.1 | DB2 伺服器 IP |
| Network Port | 4444 | DB2 監聽埠(預設 50000) |
| User Name | userid | 資料庫認證帳號 |
| Password | freebsd9 | 對應密碼 |
| Initial Catalog | QCDB | 資料庫名稱 |
| Package Collection | QCDB | 套件集合(DB2 端預編譯單元) |
| Default Schema | userid | 隱含 Schema,避免 SQL 需全限定名 |
在 ASP.NET 專案中,從伺服器總管將連接拖曳至 .aspx 設計介面,VS 會自動在 .aspx.cs 產生 OleDbConnection 元件並填入完整連線字串:
this.oleDbConnection1.ConnectionString =
"Provider=DB2OLEDB;" +
"Cache Authentication=False;" +
"Integrated Security=;" +
"Password=freebsd9;" +
"Persist Security Info=True;" +
"User ID=userid;" +
"Initial Catalog=qcdb;" +
"Data Source=qcdb;" +
"Mode=ReadWrite;" +
"Extended Properties=;" +
"APPC Remote LU Alias=;" +
"APPC Local LU Alias=;" +
"APPC Mode Name=QPCSUPP;" +
"Network Transport Library=TCPIP;" +
"Host CCSID=37;PC Code Page=1282;" +
"Network Address=172.23.169.1;" +
"Network Port=4444;" +
"Package Collection=qcdb;" +
"Default Schema=userid;" +
"Alternate TP Name=;" +
"Process Binary as Character=False;" +
"Units of Work=RUW";
優勢:避免手工拼寫導致參數遺漏/拼寫錯誤;跨專案複製連接元件即可複用。
SELECT * FROM address 完成精靈。dataSet1。DataGrid1),設定 DataSource=dataSet1、DataMember=address。Page_Load(或 Page_Init)撰寫繫結碼:private void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
oleDbConnection1.Open();
oleDbDataAdapter1.Fill(dataSet1, "address");
DataGrid1.DataBind();
oleDbConnection1.Close();
}
}
介面放置 4 個 TextBox(Name, Email, Age, Address)+ 1 個 Button(btnInsert)。
protected void btnInsert_Click(object sender, EventArgs e)
{
string sql = "INSERT INTO ADDRESS (NAME, EMAIL, AGE, ADDRESS) VALUES (?, ?, ?, ?)";
using (OleDbCommand cmd = new OleDbCommand(sql, oleDbConnection1))
{
cmd.Parameters.AddWithValue("@p1", TextBox1.Text);
cmd.Parameters.AddWithValue("@p2", TextBox2.Text);
cmd.Parameters.AddWithValue("@p3", TextBox3.Text);
cmd.Parameters.AddWithValue("@p4", TextBox4.Text);
oleDbConnection1.Open();
cmd.ExecuteNonQuery();
oleDbConnection1.Close();
}
// 重新繫結刷新 Grid
Page_Load(sender, e);
}
關鍵點:使用 ? 位置參數 + Parameters.AddWithValue,徹底解決單引號轉義與 SQL 注入問題。
介面放置 TextBox5(輸入要刪除的 Name)+ Button(btnDelete)。
protected void btnDelete_Click(object sender, EventArgs e)
{
string sql = "DELETE FROM ADDRESS WHERE NAME = ?";
using (OleDbCommand cmd = new OleDbCommand(sql, oleDbConnection1))
{
cmd.Parameters.AddWithValue("@p1", TextBox5.Text);
oleDbConnection1.Open();
cmd.ExecuteNonQuery();
oleDbConnection1.Close();
}
Page_Load(sender, e);
}
更新邏輯同理採參數化 UPDATE ... SET col=? WHERE key=?。為避免重複程式碼,建議封裝 BindGrid() 方法:
private void BindGrid()
{
dataSet1.Clear();
oleDbDataAdapter1.Fill(dataSet1, "address");
DataGrid1.DataBind();
}
Microsoft 另提供 OLE DB Provider for Oracle、AS/400、VSAM、Indexing Service、Active Directory 等驅動,同一套 OleDbConnection/Command/Adapter 程式碼只需更換連線字串即可切換資料源,實現真正的「統一資料存取層」。
掌握 OLE DB for DB2 的安裝、配置與參數化程式設計模式,即可在 .NET 平台高效構建連接大型主機資料庫的企業級應用。