.NET Framework 內建的 System.Data.OracleClient 雖已標記為過時,但在維護舊專案時仍常見。本文示範 WinForms 專案中連接 Oracle、執行查詢與更新的完整程式碼結構,並強調資源釋放的最佳實務。
System.Data.OracleClient.dll。using System.Data.OracleClient;string connStr = "Data Source=ORCL;User Id=scott;Password=tiger;";
Data Source 可為 tnsnames.ora 別名或 Easy Connect 字串(如 //host:1521/ORCL)。
private void QueryData()
{
string sql = "SELECT name FROM fin_ipr_inmaininfo WHERE card_no = :cardNo";
using (var conn = new OracleConnection(connStr))
using (var cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.Add(":cardNo", "0000000002");
try
{
conn.Open();
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
this.lbl.Text = reader.GetString(0); // 或 reader["name"].ToString()
}
}
}
catch (Exception ex)
{
MessageBox.Show("查詢錯誤:" + ex.Message);
}
} // using 區塊結束自動關閉連線與釋放資源
}
private void UpdateData()
{
string sql = "UPDATE fin_ipr_inmaininfo SET name = :newName WHERE card_no = :cardNo";
using (var conn = new OracleConnection(connStr))
using (var cmd = new OracleCommand(sql, conn))
{
cmd.Parameters.Add(":newName", "wzd");
cmd.Parameters.Add(":cardNo", "0000000002");
try
{
conn.Open();
int rows = cmd.ExecuteNonQuery();
MessageBox.Show($"更新筆數:{rows}");
}
catch (Exception ex)
{
MessageBox.Show("更新錯誤:" + ex.Message);
}
}
}
Connection、Command、DataReader 正確 Dispose(),避免連線洩漏。OracleException 可取得錯誤代碼(如 ORA-01017)。Oracle.ManagedDataAccess (NuGet) 或 Dapper 搭配 Managed Driver,效能與相容性更佳。