oracleのdbが接続できません

タグの編集
投稿者 ソッケル  (社会人) 投稿日時 2017/7/20 12:00:14
Oracleと接続してデータベースの読み書きしようとしたのですが、以下のソースのコメントになっているところでエラーが出てしまい原因が全く分かりません。どなたか教えてください、お願いします。

importsのエラー内容(インポート 'System.Data.OracleClient' で指定された名前空間または型が、パブリック メンバーを含んでいないか、または見つかりません。名前空間または型が定義されていて、少なくとも 1 つのパブリック メンバーを含んでいることを確認してください。また、インポートされた要素名がエイリアスを使用していないことを確認してください。)

Dimのエラー内容(型 'OracleConnection' が定義されていません。)



'Imports System.Data.OracleClient

Public Class Form2_3

    Private Sub Form2_2_Load(sender As Object, e As EventArgs) Handles Me.Load

        'Dim Cn As New OracleConnection("Data Source=localhost;Persist Security Info=True;User ID=asil;Password=***********;Unicode=True")
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/7/20 12:52:07
> Oracleと接続して
VB 以外からの接続はできている状態なのですね?
また、OracleClient の 32bit版 / 64bit 版の違いにもご注意ください。


> 'Imports System.Data.OracleClient
System.Data.OracleClient.DLL を「参照設定」しているか確認しておいてください。

このライブラリは、.NET 1.1 以降では標準で含まれていますが、
.NET 1.0 では別途ダウンロード入手が必要です。
(.NET 4 以降では非推奨になりました)


> Public Class Form2_3
>  Private Sub Form2_2_Load(sender As Object, e As EventArgs) Handles Me.Load
クラス名が「2_3」なのに、イベントハンドラが「2_2」なのは聊か違和感が…。
投稿者 (削除されました)  () 投稿日時 2017/7/20 13:05:17
(削除されました)
投稿者 ソッケル  (社会人) 投稿日時 2017/7/20 13:17:12
返答ありがとうございます。

>VB 以外からの接続はできている状態なのですね?
VB以外からは試してはいません。。。

>System.Data.OracleClient.DLL を「参照設定」しているか確認しておいてください。
参照設定したらここのエラーは無くなりました!

>クラス名が「2_3」なのに、イベントハンドラが「2_2」なのは聊か違和感が…。 
2-2で作成したものとほとんど一緒なのでコピーしました。

また、新たに
警告 1 'System.Data.OracleClient.OracleConnection' は旧形式です: 'OracleConnection has been deprecated. http://go.microsoft.com/fwlink/?LinkID=144260'
と表示されたのですが、何かダウンロードしなければいけませんか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2017/7/20 14:11:37
> 'System.Data.OracleClient.OracleConnection' は旧形式で

新規のプロジェクトでは、今回利用しようとしていたコードを利用しないでください。

先に述べたように、.NET 4 以降においては、Microsoft 製の Oracle Data Provider である
System.Data.OracleClient 名前空間のライブラリが、非推奨となっているためです。


代わりに、Oracle 社純正のライブラリを使うようにします。
今なら、12c 向けの Oracle Managed Driver を利用するのが良いでしょう。

Visual Studio の [ツール] メニューの nuget から "Oracle" で検索すれば
「ODP.NET」(Oracle Data Provider .NET)が一覧に現れるので、
それを指定することで、プロジェクトへの参照設定まで行ってくれます。
(nuget が使えない場合は、oracle.com から ODP.NET をダウンロードしてください)

なお、ODP.NET の使い方は、現状のコードとさほど変わらないと思います。
Imports するべき名前空間が System.Data.OracleClient ではなく
Oracle.ManagedDataAccess.Client (または Oracle.DataAccess.Client ) に
変更とはなりますけれども。

http://blog.shibata.tech/entry/2014/11/02/173039
http://www.oracle.com/technetwork/jp/articles/dotnet/o24odp-2147205-ja.html


>> VB 以外からの接続はできている状態なのですね?
> VB以外からは試していません......

今後、VB 側のコードを正しいものに修正してみて、それでも繋がらない場合は、
 ・接続文字列が間違っている
 ・クライアント設定の不足(tnsnames.ora を読み取れないなど)
 ・サーバー設定の不足(リスナー用のポートが閉じられているなど)
などといった要因を排除するために、VB 以外(SQL*Plus 等)から
接続できることを事前確認しておいた方が良いでしょう。