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

在 Oracle 上構建 .NET 應用程式完整教程:從環境建置到 DataReader 進階應用

     編輯:Oracle 資料庫基礎

前言

本文系統說明使用 Visual Studio .NET (VS.Net) 開發存取 Oracle 資料庫之 .NET 應用程式的完整流程,涵蓋 ODP.NET 環境建置、專案建立、連接字串、核心物件操作、錯誤處理、DataReader 進階用法,並附三個漸進式實作練習。

一、ODP.NET 環境建置

  • 安裝 Oracle Client 連通性軟體
  • 下載安裝 Oracle Data Provider for .NET (ODP.NET)(Oracle 官方免費提供)
  • 驗證:VS.Net 機器上用 SQL*Plus 成功連線 Oracle
  • 參考:Oracle Data Provider for .NET Developer's Guide 10g

二、VS.Net 專案建立與引用

  1. New Project → VB.Net / C# → Windows Application
  2. 專案名 OtnWinApp,方案名 OtnSamples
  3. Solution Explorer → References 右鍵 Add Reference → 選 Oracle.DataAccess.dll

三、匯入命名空間

' VB.Net
Imports System.Data
Imports Oracle.DataAccess.Client

// C#
using System.Data;
using Oracle.DataAccess.Client;

四、連接字串構建

方式 1:tnsnames.ora 別名

Dim oradb As String = "Data Source=OraDb;User Id=scott;Password=tiger;"
// tnsnames.ora: OraDb = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521))...)

方式 2:內嵌連接描述(免 tnsnames.ora)

Dim oradb As String = "Data Source=(DESCRIPTION=" & _
    "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=OTNSRVR)(PORT=1521)))" & _
    "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL)));" & _
    "User Id=scott;Password=tiger;"

安全警示:明文帳密嵌入程式碼不安全,生產環境請用加密配置檔或 Windows 整合驗證。

五、Connection 物件實例化與開啟

Dim conn As New OracleConnection(oradb)
conn.Open()

' 替代寫法
Dim conn As New OracleConnection()
conn.ConnectionString = oradb
conn.Open()

六、Command 物件與資料讀取

基本查詢

Dim sql As String = "SELECT dname FROM dept WHERE deptno = 10"
Dim cmd As New OracleCommand(sql, conn)
cmd.CommandType = CommandType.Text
Dim dr As OracleDataReader = cmd.ExecuteReader()
dr.Read()
Label1.Text = dr.Item("dname")   ' VB.Net: 依欄位名或序號 dr.Item(0)
Label1.Text = dr.GetString(0)    ' 強型別存取器

C# 必須使用強型別存取器

OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
label1.Text = dr.GetString(0);

型別轉換最佳實踐

' VB.Net 顯式轉換
Label1.Text = CStr(dr.Item("deptno"))

// C# 顯式轉換
string deptno = dr.GetInt16("deptno").ToString();

七、資源清理與 using 區塊

' VB.Net
conn.Dispose()  ' 包含 Close()

// C# 推薦 using 區塊自動清理
using (OracleConnection conn = new OracleConnection(oradb)) {
    conn.Open();
    OracleCommand cmd = new OracleCommand();
    cmd.Connection = conn;
    cmd.CommandText = "SELECT dname FROM dept WHERE deptno = 10";
    cmd.CommandType = CommandType.Text;
    OracleDataReader dr = cmd.ExecuteReader();
    dr.Read();
    label1.Text = dr.GetString(0);
} // 自動 Dispose

八、錯誤處理:Try-Catch-Finally 進階模式

基本結構

Dim conn As New OracleConnection(oradb)
Try
    conn.Open()
    ' ... 執行命令 ...
Catch ex As Exception
    MessageBox.Show(ex.Message.ToString())
Finally
    conn.Dispose()
End Try

友善的 Oracle 錯誤訊息

Catch ex As OracleException
    If InStr(1, ex.Message.ToString(), "ORA-1:", CompareMethod.Text) > 0 Then
        MessageBox.Show("嘗試插入重複資料。")
    ElseIf InStr(1, ex.Message.ToString(), "ORA-12545:", CompareMethod.Text) > 0 Then
        MessageBox.Show("資料庫不可用。")
    Else
        MessageBox.Show("資料庫錯誤: " + ex.Message.ToString())
    End If
Catch ex As Exception
    MessageBox.Show(ex.Message.ToString())

原則:OracleException 先捕獲特定錯誤碼,Exception 最後捕獲其他;Finally 確保連接關閉。

九、DataReader 進階:多列多行讀取

單行多欄

SELECT deptno, dname, loc FROM dept WHERE deptno = 10
Label1.Text = "The " + dr.Item(1) + " department is in " + dr.Item("loc")  ' VB.Net
label1.Text = "The " + dr.GetString(1) + " department is in " + dr.GetString(2)  // C#

多行迴圈填充 ListBox

DataReader 唯前向唯讀,不支援 DataGrid 繫結,適合 ListBox:

SELECT deptno, dname, loc FROM dept
' VB.Net
While dr.Read()
    ListBox1.Items.Add("The " + dr.Item(1) + " department is in " + dr.Item("loc"))
End While

// C#
while (dr.Read()) {
    listBox1.Items.Add("The " + dr.GetString(1) + " department is in " + dr.GetString(2));
}

十、三個漸進式實作練習

上機操作 1:基礎查詢顯示

  • 表單加 Button + Label
  • Button Click 事件寫入查詢 deptno=10 程式碼
  • 執行點擊,Label 顯示 "ACCOUNTING"

上機操作 2:互動式查詢與錯誤處理

  • 加 TextBox (輸入 deptno) + Label (提示 "Enter Deptno:")
  • 修改 SQL 串接 TextBox1.Text
  • 加入 If dr.Read() Then ... Else "deptno not found" 防無資料報錯
  • 測試輸入字母導致例外 → 引出需求:完整 Try-Catch

上機操作 3:多行多欄顯示

  • 加 ListBox 填滿表單寬度
  • 移除 WHERE 條件,查詢所有部門
  • While/while 迴圈填充 ListBox

總結

掌握 ODP.NET 核心開發流程:

  1. 引用 Oracle.DataAccess.dll + 匯入命名空間
  2. 構建連接字串(tnsnames.ora 或內嵌描述)
  3. 實例化 OracleConnection、OracleCommand、OracleDataReader
  4. 使用 ExecuteReader() + Read() + 強型別存取器讀取資料
  5. 實施 Try-Catch(OracleException)-Catch(Exception)-Finally 錯誤處理
  6. 用 using (C#) / Dispose() (VB.Net) 確保資源釋放
  7. DataReader 適用唯前向讀取,多行配合 ListBox/自訂集合

作者:John Paul Cook (Oracle Certified DBA, Microsoft MCSD .Net),專注 .NET 與 Oracle 整合開發。

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