使用.NET應用程式串連Oracle資料庫

來源:互聯網
上載者:User

標籤:

最近又被同學問起“為何.NET應用程式串連Oracle資料庫總是出錯?”,我想,這是因為我們平常都是使用微軟的產品,而缺少對其它平台產品的研究。廢話講了這麼多,下面我就具體說說如何正確的配置Oracle以適應.NET應用開發。

一、下載必要元件
  • Oracle 11.2g(64位)
    :http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html
    註:本文使用的是64位的,如果你的機子不支援64位,請下載32位的。
  • Oracle Data Access Components(ODAC)(64位)
    此組件就是.NET應用程式與Oracle串連的橋樑,.NET應用程式就是通過此組件訪問Oracle資料庫。
    64位:http://www.oracle.com/technetwork/cn/database/windows/downloads/index-098472-zhs.html
    32位:http://www.oracle.com/technetwork/cn/database/windows/downloads/index-101312-zhs.html
    註:本文使用的是64位的,如果你的機子不支援64位,請下載32位的。
  • Oracle SQL Developer
    此工具是PL/SQL開發的視覺化檢視,如果你覺得用SQLPlus比較爽,那麼不用下載此工具。
    :http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
    註:本文使用的是64位的,如果你的機子不支援64位,請下載32位的。
二、開始安裝必要元件

1、Oracle的安裝比較簡單,直接點擊“下一步”到底就完成安裝了。

2、然後,也就是最最關鍵的一步,配置Oracle的listener.ora檔案。我的這個檔案在“C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN”目錄下,如果你把Oracle安裝在其它地方,請到相關目錄尋找。找到該檔案後,用記事本開啟,然後我們需要添加一個“SID_DESC”節點,該節點內容如下:

(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)

然後我們需要添加一個“DEFAULT_SERVICE_LISTENER”參數配置項,並將其值設為“ORCL”。如若沒有配置此項,那麼接下來在調用ODAC組件時將會一直報“ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA”的錯誤,切記!切記!就是這個逼玩意兒,耗了我一天時間,設計這個參數的人TMD的腦殘!

DEFAULT_SERVICE_LISTENER = ORCL

所以,最終看到的listener.ora檔案的內容應該是下面這樣的,注意黃色部分:

# listener.ora Network Configuration File: C:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)

DEFAULT_SERVICE_LISTENER = ORCL

ADR_BASE_LISTENER = C:\oracle

然後,tnsnames.ora檔案也應進行相應的修改,修改後如下:

# tnsnames.ora Network Configuration File: C:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)

3、然後重啟“OracleOraDb11g_home1TNSListener”服務和“OracleServiceORCL”服務。

4、接著我們開啟sqlplus命令列工具,然後輸入“/as sysdba”以管理員身份登入Oracle,接著輸入“startup”以啟動資料庫。正常情況應該是如所示:

可是,如果顯示的是所示,那該怎麼辦呢?

這裡推薦一篇我在網上找到的解決方案,地址:http://blog.csdn.net/lpftobetheone/article/details/11099785。大家可以參照這篇文章所述進行修複,注意,該文章的某些地方的描述與不符,請大家盡量以為準。如果實在不明白可以在下方留言給我。

5、Oracle安裝完了,也配置完了,現在我們需要建立一個表,並插入幾條資料。我個人是不喜歡在sqlplus裡面寫sql語句,如果你喜歡,那麼請直接跳至第6步。

1) 解壓我們下載的“sqldeveloper-4.0.3.16.84-x64.zip”壓縮包,然後雙擊裡面的“sqldeveloper.exe”就運行了,然後我們點擊所示的“建立串連”的按鈕:

2) 按所示輸入,然後點擊串連:

3) 然後輸入如下SQL語句:

--建立suzy使用者,密碼為:orcl,預設資料表空間為:users
create user suzy identified by orcl default tablespace users;

--授權suzy使用者不限制其資料表空間的使用
grant unlimited tablespace to suzy;

--授權suzy使用者串連許可權和資源訪問的許可權。
grant CONNECT,RESOURCE to suzy;

4) 然後運行SQL語句:

5) 然後重複第 2) 步以“suzy”的身份登入:

6) 然後編寫建立表的SQL語句並執行:

7) 然後插入兩條記錄:

6、接下來就是安裝ODAC組件了,先將下載的ODAC組件解壓到一個目錄,比方我這裡解壓到“C:\ODAC112021Xcopy_x64”這個目錄。

7、在上一步解壓的路徑下開啟命令列,然後輸入命令“install.bat”後斷行符號。我們看到出現了一些命令提示資訊,你可以根據你的需要進行選擇,這裡我選擇安裝全部ODAC組件,並把它安裝到“C:\odp.net”,接著輸入如下命令,並等待其完成:

install.bat all C:\odp.net myhome

8、接著開啟“C:\odp.net”可以看到已經建立了很多檔案,然後我們在此目錄下開啟命令視窗,輸入命令“configure.bat”,我們依舊會看到命令提示資訊,然後根據提示資訊輸入如下命令,並等待其完成:

configure.bat all myhome

9、使用VS建立控制台項目,然後添加引用“C:\Windows\Microsoft.NET\assembly\GAC_64\Oracle.DataAccess\v4.0_4.112.2.0__89b483f429c47342\oracle.dataaccess.dll”。當然,如果你的VS的GAC列表裡面有“Oracle.DataAccess”,你就不需要費勁地跑到C盤的GAC目錄裡面去找了,我是因為在我VS的GAC列表裡找不到,所以才跑C盤GAC目錄裡面找。

10、編寫測試代碼,如下:

static void Main(string[] args)
{
string connectionString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
using (OracleConnection conn = new OracleConnection(connectionString))
{
string sql = "select * from testorcl";
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
conn.Open();
OracleDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string id = (reader.GetValue(0) ?? String.Empty).ToString();
string name = (reader.GetValue(1) ?? String.Empty).ToString();
Console.WriteLine(String.Format("ID={0}, Name={1}", id, name));
}
}
}
Console.ReadKey();
}

其中,連接字串配置於“App.config”檔案中,如下:

<connectionStrings>
<add name="connstr" connectionString="Data Source=127.0.0.1;User ID=suzy;Password=orcl;" providerName="Oracle.DataAccess.Client"/>
</connectionStrings>

然後,將項目的目標平台設為“x64”,否則會運行失敗。當然,如果你的機子是32位的就要選“x86”平台。

11、運行結果如下:

至此,使用.NET應用程式串連Oracle的一般步驟就是這樣。當然,Oracle也提供了支援EntityFramework的相關類庫,感興趣的同學可以去Oracle官網搜搜看。

參考文獻
  • http://ora-12xyz.com/error/ORA-12504
  • http://gerardnico.com/wiki/database/oracle/listener.ora
  • http://blog.csdn.net/lpftobetheone/article/details/11099785

使用.NET應用程式串連Oracle資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.