首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 存取 DB2 資料庫完整指南:OLE DB Provider 設定與 ADO.NET 實戰

     編輯:關於C語言

前言

DB2 是企業級主機資料庫主力。.NET 透過 **OLE DB Provider for DB2** (隨 Microsoft Host Integration Server 提供) 存取 DB2。本文涵蓋驅動安裝、連線字串建立、Visual Studio 設計工具整合、基本 CRUD 與參數化查詢。

驅動安裝

  1. 下載並安裝 Microsoft Host Integration Server (HIS) (含 OLE DB Provider for DB2 / ODBC Driver)。
  2. 安裝時勾選 Data Integration 元件。
  3. 安裝完成後,系統會註冊 DB2OLEDB Provider。

連線字串參數詳解


Provider=DB2OLEDB;
Data Source=QCDB;                    // DB2 資料庫別名 (Database Alias)
Initial Catalog=QCDB;                // 資料庫名稱
User ID=db2user;                     // 使用者
Password=secret;                     // 密碼
Network Transport Library=TCPIP;     // 通訊協定
Network Address=10.0.0.50;           // DB2 伺服器 IP
Network Port=50000;                  // DB2 通訊埠 (預設 50000)
Package Collection=MYCOLL;           // 套件集合 (Package Collection)
Default Schema=DB2USER;              // 預設 Schema
Host CCSID=37;                       // 主機編碼 (EBCDIC 37 = 美式英文)
PC Code Page=1252;                   // 用戶端編碼 (ANSI 1252)
Process Binary as Character=False;   // 二進位欄位處理
Units of Work=RUW;                   // 工作單位類型

中文環境關鍵: 正確設定 Host CCSID (如 835 繁中/5035 簡中) 與 PC Code Page (950/936),否則中文會亂碼。

Visual Studio 設計工具整合 (Server Explorer)

  1. 開啟 **伺服器總管** → 右鍵「資料連接」→「加入連接」。
  2. 資料來源選 IBM DB2 / Microsoft OLE DB Provider for DB2。
  3. 填入上述參數,測試連線成功後確定。
  4. 將連接拖曳至 Web Form / WinForm,自動產生 OleDbConnection、OleDbDataAdapter、連線字串等元件。

ADO.NET 基本操作範例


using System.Data.OleDb;

string connStr = "Provider=DB2OLEDB;Data Source=QCDB;User ID=u;Password=p;Network Address=10.0.0.50;Network Port=50000;Package Collection=MYCOLL;Default Schema=DB2USER;Host CCSID=37;PC Code Page=950;";

using (var conn = new OleDbConnection(connStr))
{
    conn.Open();

    // 查詢
    using (var cmd = new OleDbCommand("SELECT NAME, EMAIL, AGE FROM ADDRESS WHERE AGE > ?", conn))
    {
        cmd.Parameters.AddWithValue("@age", 30);
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
                Console.WriteLine($"{reader["NAME"]} | {reader["EMAIL"]} | {reader["AGE"]}");
        }
    }

    // 新增 (參數化防止 SQL Injection)
    using (var cmd = new OleDbCommand("INSERT INTO ADDRESS (NAME, EMAIL, AGE, ADDRESS) VALUES (?, ?, ?, ?)", conn))
    {
        cmd.Parameters.AddWithValue("@name", "王小明");
        cmd.Parameters.AddWithValue("@email", "wang@example.com");
        cmd.Parameters.AddWithValue("@age", 28);
        cmd.Parameters.AddWithValue("@addr", "台北市信義區");
        cmd.ExecuteNonQuery();
    }

    // 刪除
    using (var cmd = new OleDbCommand("DELETE FROM ADDRESS WHERE NAME = ?", conn))
    {
        cmd.Parameters.AddWithValue("@name", "王小明");
        cmd.ExecuteNonQuery();
    }
}

關鍵注意事項

  • 參數標記: OLE DB 使用 ? 位置參數,**不支援命名參數** (如 @name),順序必須與 SQL 吻合。
  • 資料型別對應: DB2 DECIMAL → .NET decimal,DATE/TIME/TIMESTAMP → DateTime,CHAR/VARCHAR → string (注意 CCSID 轉碼)。
  • 大小寫敏感: DB2 物件名稱 (表/欄) 視定義而定,建議 SQL 全大寫或加雙引號 "TableName"。
  • 連線池: OLE DB 預設啟用連線池,高併發時注意 Max Pool Size 設定。
  • 異常處理: 捕獲 OleDbException,檢查 Errors 集合取得 DB2 原生錯誤碼 (SQLCODE/SQLSTATE)。

現代化替代:IBM Data Server Provider (NET Provider)

IBM 提供原生 .NET Provider (IBM.Data.DB2 / IBM.Data.DB2.Core),**不需 HIS、效能更好、支援 .NET Core / .NET 5+ / Linux / 容器部署**。


// NuGet: IBM.Data.DB2.Core
using IBM.Data.DB2.Core;

string connStr = "Server=10.0.0.50:50000;Database=QCDB;UID=db2user;PWD=secret;";

using (var conn = new DB2Connection(connStr))
{
    conn.Open();
    // 後續 ADO.NET API 相同 (DB2Command, DB2Parameter, DB2DataReader...)
}

新專案**強烈建議**改用 IBM 原生 Provider,避免 HIS 安裝複雜、32/64 位元相容、伺服器部署困擾。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved