Oracle.DataAccess.dll (版本 2.112.1.2)bin\Debug) 與 .exe 同層:Oracle.DataAccess.dll、oraociei11.dll、oraops11w.dll 等 Instant Client 核心庫。關鍵點: 必須使用 Oracle.DataAccess.Client 命名空間,而非 Microsoft 已淘汰的 System.Data.OracleClient。
using System;
using System.Data;
using Oracle.DataAccess.Client;
private OracleConnection GetOracleConnection()
{
string connString =
"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.152)(PORT=1521))" +
"(CONNECT_DATA=(SID=orcl)));User Id=SmartDB;Password=zz;";
// 實務上建議將連線字串存放於 Web.config / App.config 中
return new OracleConnection(connString);
}
private void Oracle_ExecuteNonQuery(string sql)
{
using (OracleConnection conn = GetOracleConnection())
{
try
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
// 記錄日誌後再拋出,避免直接顯示錯誤細節給使用者
throw;
}
} // using 區塊結束自動呼叫 conn.Close() 並釋放資源
}
private DataTable Oracle_ExecuteQueryToDataTable(string sql)
{
DataTable dt = new DataTable();
using (OracleConnection conn = GetOracleConnection())
{
try
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(sql, conn))
using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
{
adapter.Fill(dt);
}
return dt;
}
catch (Exception ex)
{
// 可在此處記錄錯誤日誌
throw;
}
}
}
using 區塊確保連線、命令、DataReader 等非受控資源確定釋放。cmd.Parameters.Add(...)) 是防止 SQL Injection 的必要手段。