於 Web 伺服器安裝 Oracle Client(僅需 Client 元件),參考 Oracle 9i/10g 安裝圖解,安裝類型選「Runtime」或「Administrator」。
使用 Net Configuration Assistant 建立連線別名,對應遠端 DB 的 IP、Port、Service Name。測試 tnsping 確認連通。
以 SYS AS SYSDBA 登入,建立使用者並授予 CONNECT, RESOURCE 角色,視需求再給 DBA 或特定物件權限。避免直接使用 SYS/SYSTEM 連線。
在 PL/SQL Developer 或 SQL*Plus 中以該使用者執行預存程序,確認邏輯正確、權限足夠。
<connectionStrings>
<add name="OracleConn"
connectionString="Data Source=ORCL;User Id=app_user;Password=******;"
providerName="System.Data.OracleClient" />
</connectionStrings>
亦可使用 Easy Connect 免 TNS:Data Source=192.168.1.100:1521/ORCL。
右鍵專案 → Add Reference → System.Data.OracleClient(.NET Framework 內建,已標示 Obsolete,新專案建議改用 Oracle 官方 Oracle.ManagedDataAccess NuGet 套件)。
using System;
using System.Data;
using System.Configuration;
using System.Data.OracleClient; // 或 Oracle.ManagedDataAccess.Client
public partial class _Default : System.Web.UI.Page
{
private string _connStr = ConfigurationManager.ConnectionStrings["OracleConn"].ConnectionString;
// 1. 測試連線
protected void Button1_Click(object sender, EventArgs e)
{
try
{
using (var conn = new OracleConnection(_connStr))
using (var cmd = new OracleCommand("SELECT 1 FROM DUAL", conn))
{
conn.Open();
cmd.ExecuteNonQuery();
Label1.Text = "連線成功";
}
}
catch (Exception ex)
{
Label1.Text = "失敗:" + ex.Message;
}
}
// 2. 查詢回傳 DataSet 並繫結 GridView
protected void Button2_Click(object sender, EventArgs e)
{
using (var conn = new OracleConnection(_connStr))
using (var da = new OracleDataAdapter("SELECT * FROM sys.test1", conn))
{
var ds = new DataSet();
da.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
}
// 3. 呼叫帶 IN/OUT 參數的預存程序
protected void Button3_Click(object sender, EventArgs e)
{
using (var conn = new OracleConnection(_connStr))
using (var cmd = new OracleCommand("getName", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("name_out", OracleType.VarChar, 20).Direction = ParameterDirection.Output;
cmd.Parameters.Add("id_in", OracleType.VarChar, 20).Direction = ParameterDirection.Input;
cmd.Parameters["id_in"].Value = "1";
conn.Open();
cmd.ExecuteNonQuery();
TextBox1.Text = cmd.Parameters["name_out"].Value?.ToString();
}
}
// 4. 呼叫回傳 REF CURSOR 的 Package 程序
protected void Button4_Click(object sender, EventArgs e)
{
using (var conn = new OracleConnection(_connStr))
using (var cmd = new OracleCommand("test.GETLIST", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("cur_OUT", OracleType.Cursor).Direction = ParameterDirection.Output;
conn.Open();
using (var da = new OracleDataAdapter(cmd))
{
var ds = new DataSet();
da.Fill(ds);
GridView2.DataSource = ds.Tables[0];
GridView2.DataBind();
}
}
}
}
PATH 包含 ORACLE_HOME\bin、IIS 應用程式集區啟用 32 位元(若 Client 為 32-bit)。tnsnames.ora 路徑、權限、拼寫。SELECT/EXECUTE 權限。Web.config 並加密 connectionStrings 區段。using 區塊確保連線、命令、資料配接器正確釋放。Oracle.ManagedDataAccess 純 managed 驅動,免安裝 Client,部署更輕量。