- PR -

VB.NETからOracle9iへの接続でTNSエラー

投稿者投稿内容
SIC
会議室デビュー日: 2005/09/01
投稿数: 14
投稿日時: 2005-09-02 11:40
初めて投稿します。
VB.NETでOracle9iへ接続しようとしていますがうまくいきません。
他のスレッドをみたり色々と調べて見たのですが分からないので、
質問させてください。
[開発環境]
<サーバー>
WindowsServer2003 Standard Edition SP1
Oracle9.2

<クライアント>
WindowsXP Pro SP2
VisualStadio.Net 2003
.Net FrameWork1.1
Oracle9.2

Oracle Net Managerや管理ツールのODBCでの接続はうまく行くのですが、
プログラムから接続しようとすると
"ORA-12154 TNS:サービス名が解決できませんでした"
というメッセージが出てしまいます。
OleDBConnectionとOracleClient.OracleConnectionの両方で
チャレンジしましたが両方とも同じ結果でした。
以下がOracleの設定とソースコードです。

<Oracleの設定>
ネット・サービス名:DataBase
ホスト名:Host
サービス名:Service
ユーザーID:UserID
パスワード:Password

<ODBCの設定>
データソース名:DataBase
TNSサービス名:DataBase
ユーザーID:UserID
パスワード:Password

<OleDBConnection>
Imports System.Data
Imports System.Data.OleDb
strConnect = "Provider=MSDAORA.1;User ID=UserID;Password=Password;" & _
  "Data Source=Host;database=DataBase;Persist Security Info=False"
Dim DbCon As New OleDbConnection(strConnect)
DbCon.Open()
DbCon.Close()
DbCon = Nothing

<OracleClient>
Imports System.Data
Imports System.Data.OracleClient
strConnect = "User ID=UserID;Password=Password;Data Source=DataBase"
Dim OraCon As New OracleClient.OracleConnection(strConnect)
OraCon.Open()
OraCon.Close()
OraCon = Nothing

またサーバーエクスプローラーで接続を追加した場合も、
接続のテストではうまく行くのですが、
実際にフォームにコントロールを貼り付けてオープンしようとすると
同様に"ORA-12154 TNS:サービス名が解決できませんでした"の
メッセージが出てきます。

VB.NETもOracleも初めてなのですごく初歩的な質問を
しているかもしれませんがよろしくお願いします。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-02 12:04
お世話になります。

検索したらでてきました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7757&forum=7&start=0
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-09-02 12:10
初投稿ということなので、念のため案内。
Oracle
まだでしたら、ご覧になって下さい。

とりあえずTNSエラーと聞いたら、
私の場合こんなの確認しますかね。

    ・「tnsname.ora」ファイルの設定内容
    ・SQLPlus!で接続できるか
    ・サービスがあがっているか

DBにdと疎い私にはこのへんが限界w

こっから適当なことを書きます。
VB.net+Oracleで開発する際は、
ADO.netかODP.netを使うのが
一般的ではないかと(勝手に)思ってます。

OleDBConnectionを使用されているので、
VB6からの自動アップグレードを使ったらんでしょうかね?

#被ったので一部削除。あぅ

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-02 12:15 ]
SIC
会議室デビュー日: 2005/09/01
投稿数: 14
投稿日時: 2005-09-02 16:30
返信ありがとうございます。

>なおこ(・∀・)さん
参照のページ、確認しました。
SQL Plusで「connect ユーザ名/パスワード@サービス名」とした場合、
問題なく接続できています。
ただ、「connect ユーザー名/パスワード@サービス名.world」とすると
「ORA-12154 TNS サービス名を解決できませんでした」という
メッセージが返ってきました。

またリスナーのリスニング位置には
サービス・ネーミングと同じ設定で登録しているのですが、
「%ORACLE_HOME%TNSListener」というサービスが登録されてないという
ところで行き詰りました。
代わりに「Oracle%ORACLE_HOME_NAMD%ClientCache」という
サービスがありましたが、開始しようとするとアプリケーションエラー
「"0x7c951e58"の命令が"0x00000000"のメモリを参照しました。
メモリが"read"になることはできませんでした」が発生してしまいました。
もしかするとこの辺に原因があるのでしょうか?

>葉瀬崎浩樹さん
tnsname.oraには
***********************
DataBase =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOST)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = Service)
)
)
**********************
という風に記述されていましたが、問題ありますでしょうか?

SQLPlusでは「connect ユーザ名/パスワード@サービス名」とした場合は
問題なく接続できています。

サービスがあがっているというのはNetManagerのサービス・ネーミングが
構成されているか?ということでしょうか?
それでしたら問題なく構成してありましたし、接続テストもうまく行っています。
もしWindowsの管理ツールのサービスのことでしたら
どのサービスか教えていただけますでしょうか?
管理ツールのサービスも上述のとおりの状態で、
どれを開始したらよいのかも分からない状態です。

お手数をおかけしますが、よろしくお願いします。
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-09-02 18:31
引用:

SICさんの書き込み (2005-09-02 16:30) より:

tnsname.oraには
***********************
DataBase =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOST)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = Service)
)
)
**********************
という風に記述されていましたが、問題ありますでしょうか?



私の場合「Net Configuration Assistant」を使うことが多かったので、
tnsname.oraの内容までちゃんと覚えてません。。
重要な設定情報ですので、かまかけ半分で出して頂きました。
(気を悪くされたらごめんなさい)
DB関係が疎いのとORACLE環境が無いので、
私の情報は、適当にさっぴいて読んでくださいね。

で、それだけじゃあまりにアレなんで、
参考になりそうなもの置いていきます。
transname.oraのサンプル
Net Configuration Assistant
ODP.NET のインストール
(VB.NETで)oo4oでoracle接続するには?
[ASP.NET]oracleの接続エラーについて

Net Configuration Assistantの使い方(10gだけど)
第1章:データベース構築基礎

検索:oleDBConnection VB.net 接続
#リンクを編集追加

[ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-02 18:40 ]
いーた
大ベテラン
会議室デビュー日: 2004/07/12
投稿数: 154
お住まい・勤務地: 東京
投稿日時: 2005-09-02 18:44
DBサーバ上で「OracleOraHome92TNSListener」というサービスは起動しているでしょうか?
Windowsの管理ツールから確認できるサービスです。
名称は異なるかもしれませんが、TNSListenerというサービスを探してみて下さい。
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-02 18:52
お世話になります。

引用:

SICさんの書き込み (2005-09-02 16:30) より:

「%ORACLE_HOME%TNSListener」というサービスが登録されてないという
ところで行き詰りました。



TNSListenerについては,上で私が張ったURLで
お話があったような。

私も環境がない&DBは詳しくないので…すみません…。

# 日本語を修正しました。
# 修正しておかしくなった日本語を修正しました。

[ メッセージ編集済み 編集者: なおこ(・∀・) 編集日時 2005-09-02 18:54 ]

[ メッセージ編集済み 編集者: なおこ(・∀・) 編集日時 2005-09-02 18:55 ]
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2005-09-06 09:12
もし
・ORAファイルの設定(NetConfigなどでの設定)
・データプロバイダの設定(ユーザIDだとかパスワードだとか)
らが問題なくて、まだ解決に至っていない場合ですが、念のため
プロジェクトファイルがある場所へのフルパスに含まれる文字に
問題がないかどうかも調べてみてください。

私の場合は半角の()が問題で、同様のエラーが発生し数日費やし
ました(^^;

ここの情報(どのスレかは失念しました)で解決に至りました。

スキルアップ/キャリアアップ(JOB@IT)