2011年9月22日 星期四

當 ASP.NET遇到 Oracle問題


國內常用的資料庫有 DbaseIII、Lotus、Excel、Access、SQL Server、Oracle、MySQL、Informix、Sybase、DB2、Ingres等等,其中 .NET連接 Excel、Access、SQL Server最常見、範例又多,而 Oracle只能在網頁上找尋答案,沒有專書做介紹,至於其他資料庫沒有接觸,不知情況。
(一)SQL Server與 Oracle連線字串
    SQL Server:IP位址為127.0.0.1,資料庫名稱為ABC
    Oracle:服務命名為DEF









使用System.Data.OracleClient,可參考 oracle設定
OLEDB For ASP.NET:可參考 oracle_oledb設定
IIS那台電腦想透過 .NET讀寫 Oracle資料庫,需要安裝 Oracle Client(或參考『客戶端不安裝的Oracle情況下連接數據庫方法』一文),Oracle Client軟體有提供〔Net Manager〕程式,讓使用者可以自定連 Oracle的服務命名。
客戶端不安裝的Oracle情況下連接數據庫方法:大陸網站,前提要有一台已安裝過 Oracle Client軟體。
(二)透過 SqlDataSource讀寫 Oracle資料庫
    SqlDataSource對 SQL Server使用的參數為@,但對 Oracle使用參數,它所認定的符號為
    例如對資料表A(有B、C兩欄位)做新增一筆資料動作
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OracleClient
Imports System.Web.Configuration
SQL Server寫法:
    Dim SqlDataSource1 As New SqlDataSource
    '取得 Web.config 檔的資料連接設定
    SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings("SQL_Server").ConnectionString
    SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.Text
    SqlDataSource1.InsertCommand = "insert into A(B,C) values (@B1,@C1)"
    SqlDataSource1.InsertParameters.Clear()
    SqlDataSource1.InsertParameters.Add("B1",設定值)
    SqlDataSource1.InsertParameters.Add("C1",設定值)
    SqlDataSource1.Insert()     '執行對資料庫做 Insert動作
Oracle寫法:透過 System.Data.OracleClient
    Dim SqlDataSource1 As SqlDataSource
    SqlDataSource1 = New SqlDataSource()
    SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings("oracle").ConnectionString
   SqlDataSource1.ProviderName = WebConfigurationManager.ConnectionStrings("oracle").ProviderName
    SqlDataSource1.InsertCommandType = SqlDataSourceCommandType.Text
    SqlDataSource1.InsertCommand = "insert into A(B,C) values (:B1,:C1)"
    SqlDataSource1.InsertParameters.Clear()
    SqlDataSource1.InsertParameters.Add("B1",設定值)
    SqlDataSource1.InsertParameters.Add("C1",設定值)
    SqlDataSource1.Insert()     '執行對資料庫做 Insert動作
(三)其他問題:
1. 使用 SqlDataSource配合 GridView對 Oracle資料庫進行資料的更新或刪除時,會發生『ORA-01036: 變數名稱?號碼無效』錯誤訊息。
   解決方式:ORA-01036:非法變量名/編號(大陸網站)
2. 使用 SqlDataSource時,出現『在建立連接至伺服器時發生錯誤。當連接至 SQL Server 2005 時,失敗的原因可能是,在預設設定下,SQL Server 不允許遠端連接。(provider: 具名的管線提供者, error: 40 - 無法開啟至 SQL Server 的連接)』錯誤訊息。
   解決方式: 由於使用 SqlDataSource連接 Oracle時,沒有指定 ProviderName,則 SqlDataSource會預設為 providerName="System.Data.SqlClient" 模式,所以才會有錯誤訊息的產生。因此,需要將 ProviderName設定為 System.Data.OracleClient。
3. 其他參考資料:
   KB-Oracle 9i NVarchar求生守則
   .net 2.0訪問 Oracle與 Sql Server的差異,注意事項,常見異常
2009/07/08 新增部份:
Statement Tracer for Oracle簡介

轉:http://blog.xuite.net/sugopili/computerblog/22869008

沒有留言:

張貼留言