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

C# 整合 Sybase DataWindow.NET:企業級報表與資料視窗元件應用

     編輯:關於C語言

DataWindow.NET 簡介

DataWindow.NET 是 Sybase (現 SAP) 為 .NET 平台提供的強大資料視窗元件,繼承 PowerBuilder DataWindow 核心引擎,提供豐富的資料呈現、編輯、報表列印功能,適合企業級應用快速開發。

安裝與環境建置

  1. 安裝 .NET Framework 1.1 / Visual Studio .NET 2003
  2. 安裝 DataWindow.NET 元件與設計環境
  3. 工具箱將出現 Sybase DataWindow 控制項頁籤

核心控制項

控制項用途
DataWindow資料呈現、編輯、導覽、報表預覽
Transaction資料庫連線管理 (連線字串、認證、交易控制)

資料視窗設計流程

  1. 使用 PowerBuilder IDE 或 DataWindow 設計師設計 .srd/.pbl 檔案
  2. 定義 SQL Select、呈現樣式、計算欄位、驗證規則
  3. 發布為 .pbd (動態庫) 或保留 .pbl (原始庫)

C# 程式碼整合範例

1. 初始化 Transaction 物件


using Sybase.DataWindow;

// 表單載入或建構函式中
private void InitializeTransaction()
{
    trans.Dbms = Sybase.DataWindow.DbmsType.OleDb;
    trans.UserId = "sa";
    trans.Password = "your_password";
    trans.AutoCommit = false;           // 手動交易控制
    trans.Lock = "RC";                  // Read Committed 隔離層級
    
    // OLE DB 連接字串
    trans.DbParm = "PROVIDER='SQLOLEDB'," +
                   "DATASOURCE='MyServer'," +
                   "PROVIDERSTRING='database=MyDB;Integrated Security=SSPI'";
    
    trans.Connect();
    
    if (trans.SqlCode != 0)
        throw new Exception($"資料庫連線失敗:{trans.Sqldbcode} - {trans.Sqlerrtext}");
}

2. 載入並顯示 DataWindow


private void LoadDataWindow()
{
    // 指定庫檔與資料視窗物件名稱
    dw.LibraryList = "reports.pbd";     // 或 "reports.pbl"
    dw.DataWindowObject = "d_employee_list";
    
    // 關聯 Transaction
    dw.SetTransaction(trans);
    
    // 擷取資料
    dw.Retrieve();
    
    if (dw.RowCount == 0)
        MessageBox.Show("查無資料");
}

3. 資料操作:新增、刪除、儲存


// 新增一列
private void btnInsert_Click(object sender, EventArgs e)
{
    int row = dw.InsertRow(0);  // 0 = 附加至末尾
    dw.SetRow(row);
    dw.SetItemString(row, "emp_id", "E001");
    dw.SetItemString(row, "emp_name", "張三");
    dw.SetItemDateTime(row, "hire_date", DateTime.Now);
}

// 刪除當前列
private void btnDelete_Click(object sender, EventArgs e)
{
    int currentRow = dw.GetRow();
    if (currentRow > 0)
        dw.DeleteRow(currentRow);
}

// 儲存變更至資料庫
private void btnSave_Click(object sender, EventArgs e)
{
    // UpdateData: true=重新選取, true=重置狀態
    if (dw.UpdateData(true, true) == 1)
    {
        trans.Commit();  // 交易提交才真正寫入資料庫
        MessageBox.Show("儲存成功");
    }
    else
    {
        trans.Rollback();
        MessageBox.Show($"儲存失敗:{dw.GetItemString(1, "db_error")}");
    }
}

4. 關閉連線


protected override void OnFormClosing(FormClosingEventArgs e)
{
    if (trans.Connected)
        trans.Disconnect();
    base.OnFormClosing(e);
}

DataWindow 進階功能

功能方法/屬性
篩選dw.SetFilter("dept_id = 'IT'") + dw.Filter()
排序dw.SetSort("salary DESC") + dw.Sort()
匯出dw.SaveAs("report.pdf", FileSaveAsType.PDF)
列印dw.Print() / dw.PrintProperties
計算欄位設計時定義,執行期自動計算
驗證規則欄位層級 Validation、列層級 ItemError 事件
主從視窗dwMaster.SetDetail(dwDetail, "dept_id", "dept_id")

常見問題與解決方案

  • 部署:需將 DataWindow.NET 執行檔隨應用程式部署,或製作合併模組 (Merge Module)
  • 授權:開發機需授權,執行檔部署需 Runtime 授權
  • 效能:大量資料使用 dw.SetRedraw(false) 批次更新後 SetRedraw(true)
  • 編碼:資料庫、連接字串、DataWindow 定義編碼需一致 (UTF-8/Big5)

本章小結

  • DataWindow.NET 將 PowerBuilder 成熟資料視窗技術帶入 .NET
  • 核心雙控制項:DataWindow (UI/資料) + Transaction (連線/交易)
  • 設計時與執行時分離:.pbl/.pbd 定義呈現邏輯,C# 控制流程
  • 支援完整 CRUD、報表、匯出、列印、主從關聯等企業級功能
  • 現代替代方案:DevExpress、Telerik、FastReport、Stimulsoft 等 .NET 原生報表元件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved