- 題名: ORACLEへのADO接続がうまく行きません
- 日時: 2012/07/02 16:12:17
- ID: 30671
- この記事の返信元:
- (なし)
- この記事への返信:
- [30675] Re[1]: ORACLEへのADO接続がうまく行きません2012/07/02 21:20:50
- ツリーを表示
■No30681に返信(kane123さんの記事) ■No30679に返信(kane123さんの記事) > 次からADO.NETと明記します。 Oracle に接続可能な ADO.NET の DB 接続クラスとしては、 下記のクラスがあります(他にもあると思います)。 (1) System.Data.Odbc.OdbcConnection (2) Microsoft.Data.Odbc.OdbcConnection (3) System.Data.OleDb.OleDbConnection (4) System.Data.OracleClient.OracleConnection (5) Oracle.DataAccess.Client.OracleConnection (6) DDTek.Oracle.OracleConnection (7) Devart.Data.Oracle.OracleConnection 5 は Oracle 製、6 は DataDirect 製、7 は Devart 製、それ以外は Microsoft 製です。 1,2,3 は、別のミドルウェアを経由しての接続となるため、それ以外の方が望ましいかと。 1: .NET 2.0以降。別途、ODBC ドライバーが必要です。 2: .NET 1.x用。別途、ODBC ドライバーが必要です。 3: 別途、OLE DB Provider が必要です。 4: .NET 4 から非推奨となりました。廃止予定です。 5: Oracle 社製。「ODP.NET」 6: サードパーティ製品。「Connect for ADO.NET」 7: サードパーティ製品。「Devart dotConnect for Oracle」(旧名:OraDirect.NET) 1 や 2 の場合は、別途 ODBC ドライバーが必要です。たとえば下記など。 (a) Microsoft ODBC for Oracle (b) Oracle ODBC Driver (c) DataDirect Connect for ODBC (Oracle 用) 3 の場合は、別途 OLE DB Provider が必要です。たとえば下記など。 (A) MSDAORA (B) OraOLEDB.Oracle (C) DataDirect.Oracle*ADOProvider ※ OleDbConnection から MSDASQL (ODBC 用 OLE DB Provider)を使う事はできません。 > 失礼しました。ADO.NETを意味したつもりでした。 "OraOLEDB.Oracle を使った ADO 接続" と言えば、多くの場合 ADODB を指すことになります。 ADO.NET と ADO とでは名前こそ似ていますが、両者は別物ですのでご注意ください。 『ADO.NET』は、System.Data 名前空間のものを指しており、特に ADO.NET 2.0 では、 System.Data.Common 名前空間の抽象クラスを継承することになっています。 Oracle 社製の「ODP.NET」の場合、クラス自体は Oracle.DataAccesss 名前空間にありますが、 Oracle.DataAccess.Client.OracleConnection クラスも、 System.Data.Common.DbConnection 抽象クラスを継承していますし、ADO.NET 1.0 版でも System.Data.IDbConnection インターフェイスを実装しています。 一方、『ADO (ActiveX Data Object)』の方は、ActiveX (COM) 系のテクノロジであり、 .NET 的には、主に ADODB 名前空間の事を指します(ADOX などを含む場合もあります)。 ADO からの接続は、「OLE DB Provider」を経由してのアクセスとなります。 具体的には、MSDAORA や OraOLEDB.Oracle などですね。 ちなみに、ADO.NET の System.Data.OleDb.OleDbDataAdapter.Fill メソッドは、 引数に ADO の ADODB.Recordset オブジェクトを受け取れるよう設計されており、 これを用いて、ADO.NET と ADO の橋渡しをすることもできるようになっています。 > まず、MSDAORAで接続する際は通例、接続文字列には、Server:= , Database:= > が無く、DataSource:= のみとなっている。この点がSqlServerと異なる。 極端な話、Oracle では Data Source すら省略されることもありますが、 各種パラメータを省略すると、既定の設定が使われたとみなされるだけのことです。 SQL Server でも、Data Source の指定だけで接続することはできます。 もちろん、SQL Server と Oracle での管理形態の違いもありますので、 必要なパラメータ数や設定はそれぞれ異なりますけれども。 また、SQL Server への接続を、「ADO」や「ADO.NET の OleDbConnection」経由で行う場合は、 "Provider=SQLOLEDB;Data Source=server;User ID=user;Password=pwd;Initial Catalog=dbName" "Provider=SQLNCLI;Data Source=server\instance;Initial Catalog=dbName" "Provider=SQLNCLI10;Data Source=server\instance;Initial Catalog=dbName" "Provider=SQLNCLI11;Data Source=(local);Database=db;Integrated Security=SSPI" などの接続文字列となります(他にも幾つかのパラメータがありますが)。 しかし「ADO.NET の SqlConnection」経由での接続であれば、Provider= の指定はありません。 Oracle も同様で、「ADO」や「ADO.NET の OleDbConnection」経由で行う場合は、 Provider= の指定が必要ですが、「ADO.NET の OracleConnection」経由では不要です。 > →したがって、ORACLEのADO.NET接続では、ソースコード内の記述だけで > 接続は確立できるものではなく、クライアントPCに何らかの形で、DataSourceが > 定義されている必要がある。(DataSource:=〜の部分にはその定義が来るため) Oracle の場合、Oracle Client をインストールしたフォルダ(ORACLE_HOME)に、 「NETWORK\ADMIN\tnsnames.ora」ファイルがあり、ここで接続先を定義できます。 ですが前回の回答にも書きましたように、最近のバージョンでは tnsnames.ora での設定が無くても接続できます。 Dim c As New Oracle.DataAccess.Client.OracleConnection( _ "User ID=scott;Password=tiger;Data Source=192.0.2.1:1521/ORCL") c.Open() Dim c As New System.Data.OracleClient.OracleConnection( _ "User ID=scott;Password=tiger;" _ & "Data Source=(DESCRIPTION=(ADDRESS_LIST=" _ & "(ADDRESS=(PROTOCOL=TCP)(HOST=192.0.2.1)(PORT=1521))" _ & ")(CONNECT_DATA=(SERVICE_NAME=ORCL)))") c.Open()
分類:[.NET]
【解決したい問題】
初めて投稿させていただきます。
VB.net にて簡単なORACLEへの接続方法が確立できず、困っています。
まず状況としては、プロバイダ:OraOLEDB.Oracle を使った
接続にはひとまず成功しています。ですが、詳しい方ならご存知のように、
OraOLEDB.Oracleによる接続(ADO)は、オラクルクライント(管理者用)をインスト
ールすることで初めて成り立ちます。
ですので、このやり方ではアプリケーションを作成して一般ユーザーに配布す
るには不向きです。ゴールとしては、クライアントの環境に全く依存しないオラ
クルのADO接続を持ったアプリケーションを作成することです。
この点がまず一つです。
次に不可解な点として、なぜ参考書やHPに出ているOracleへの接続文は全て、
cn.ConnectionString = "Provider=OraOLEDB.Oracle;" & _
"Data Source=TESTDB;" & _
"User ID=USER002;" & _
"Password=pass;"
というようになっているのか、という点について知りたいです。
このような記述のうち、Data Sourse=*** の部分は、明らかに
システムDSNにおいて、データソースの登録が事前にクライアントPC
に対してなされていることを前提としているはずです。
なぜ、ORACLEの場合はSQLServerのように、ServerNameとDataBaseを指定して
、(つまりシステムDSNの設定と全く無関係に)接続を確立するような方法になって
いないのか?という点が不可解です。
この点についてもご教授頂けたら幸いです。
以上の2点についてクリアになれば、この問題の解決の糸口が見えるのではと思います。
あるいは、全く別のアプローチで、「こうすればつながるようになる」という方法があればそれをご教授頂けると幸いです。
最後に、現状の環境について付記しておきます。
ORACLEに関する端末の設定は以下の通り:
@ODTwithODAC 11gをインストール(ごく標準的な内容)
A環境変数をORACLE用に設定
BC:\oracleフォルダを作り、その中に必要なファイルを保存
Cデータソース(ODBC)のシステムDSNで、接続したいDBのデータ
ソースを作成。
この4つを全て行った上で、初めて、上記のような接続文での
接続が可能になったようです。(ちなみにProvider:=〜の部分は
OraOLEDB.Oracleでも、MSDAORAでも両方とも行けるようです。
勉強不足な点も多々あるかと思いますが、宜しくお願いいたします。