Quantcast
Channel: わんくま同盟
Viewing all articles
Browse latest Browse all 994

ConnectionStringのPASSWORDが消える?

$
0
0

以前のお仕事で既存システムのWindows7対応をおこなって際に、5秒ごとにDB(Oracle)のあるテーブルを参照するプログラムがありました。

ところが、Windows7でそのプログラムを動かすと、「ORA-00942: 表またはビューが存在しません。」のエラーが発生しており、例外エラーのログには、「TNS-12560: TNS: プロトコル・アダプタ・エラー」が出力されておりました。

「表またはビューが存在しない」ということで、念のために使用しているテーブルおよびビューを確認したが問題はなく、例外エラーのログには本来の接続文字列とは違う(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))といった接続文字列が出力されておりました。
ネットで検索してみると、ローカルPCへ接続しようとしているとのこと。
WindowsXPまたはWindows2003では正常に動作することから、Windows7では何かが起きているわけです。

早速、デバッグできる環境を整えてトレースしていくと、最初のDBの接続は出来ているが、タイマー処理で5秒ごとにDBをオープンしようとするところで例外エラー「ORA-01017: ユーザー名/ パスワードが無効です。ログオンは拒否されました。」となった。その際にADOのConnectionStringプロパティを確認してみると、接続文字列にはあった「PASSWORD=xxxxx」の文字列が消えていたのである。

再度、最初のDBの接続からConnectionStringプロパティに着目してみると、iniファイルから接続文字列をConnectionStringにセットした段階ではPASSWORD文字列はあるのですが、Openを実行した後にConnectionStringプロパティからPASSWORD文字列が消えてしまっているのです。
タイマー処理で5秒ごとにDBをオープンする際には、PASSWORD文字列が消えたConnectionStringを使用してOpenを実行しているために、「ユーザー名/ パスワードが無効」というエラーになったわけですね。

原因が分かれば解決方法は簡単です、iniファイルから接続文字列を保持した変数を使って、タイマー処理時にConnectionStringを再セットしてからOpenを実行するように修正すればいい。

ということで、実際に修正したプログラムでは正常に動作するようになりましたとさ。


Viewing all articles
Browse latest Browse all 994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>