10

Visual Studio 2010 で実行されている ASP.NET Web アプリケーションのローカル コピーがあります。このコードは、私の開発環境で実行されているコードとまったく同じです。

ASP.NET 経由で Oracle データベースに接続しようとすると、「TNS は指定された接続識別子を解決できませんでした」というメッセージがスローされます。奇妙なことに、このデータベースは TNSNAMES.ORA ファイルにあり、TNSPING または Microsoft Data Link を使用して接続すると正常に動作します。

Oracle ディレクトリのアクセス許可をいじってみましたが、役に立たないようです。

4

6 に答える 6

21

Oracle データベース クライアント (x86 または x64) がインストールされていることを確認します。

Oracle bin フォルダーを使用するように PATH が構成されていることを確認します。

PATH=C:\Oracle\product\11.2.0\client_1\bin

tnsnames.oraファイルが次のディレクトリにあることを確認します。

C:\Oracle\product\11.2.0\client_1\network\admin

次の接続文字列を試して使用できます。

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MYDATABASE)));User ID=myusername;Password=mypassword;

アップデート:

私はこの環境変数を持っていません (拡張接続文字列を使用しているため) が、ここここの誰かがTNS_ADMINを追加することを提案しています。

于 2012-08-29T15:12:07.787 に答える
4

TNS の使用:

(ASP.NET Core の場合、tnsnames.ora があるディレクトリを指す TNS_ADMIN 環境変数が必要です)

Data Source = TORCL; User Id = myUsername; Password = myPassword;

TNS を使用しない場合:

Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = MyHost) (PORT = MyPort))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MyOracleSID));
User Id = myUsername; Password = myPassword;
于 2019-04-29T11:38:12.823 に答える
2

上記の検証がすべて失敗した場合は、次のことを試してください。これが私の問題を解決したものです。これは、tnsnames.ora ファイル内の TNS エントリの名前です。

例: abc.xyz = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort))(CONNECT_DATA=(SERVICE_NAME=MyOracleSID)));

それでも ORA-12154: TNS: 指定された接続識別子を解決できませんでした

次に、 abcxyz = () に変更すると、機能しました。

基本的に、のような特殊文字を削除しました。および _ TNS エントリ名。

于 2018-04-18T14:58:35.330 に答える
1
  1. インストールされたVirtualBox 5.0.20
  2. VirtualBoxにCentOS7をインストール
  3. インストール済み Oracle 11g R2 (11.0.2)
  4. データベースを作成する
  5. VirtualBoxにWindows 10をインストールしました
  6. VisualStudio Professional 2012 をインストールし、SP1 から SP5 に段階的に更新
  7. Nuget パッケージ マネージャーを更新する
  8. Nuget パッケージ マネージャー コンソールで実行: Install-Package Oracle.ManagedDataAccess
  9. Web プロジェクトを作成します。
  10. プロジェクトの bin フォルダーに tnsnames.ora ファイルを保持します。

    TNSNAMES.ORA

MYDB= (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SID_NAME)));

以下の接続文字列を除いて、手順 12 のソース コードを使用します。

string constr = "user id=test;password=test;data source=MYDB";

または手順 12 に従います。

  1. Oracle.ManagedDataAccess.Client を使用して、コードで次のネームスペースを使用しました。Oracle.ManagedDataAccess.Types の使用;
  2. Oracle データベースに接続するには、次のステートメントを使用します。

    string constr = "user id=test;password=test;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.2)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SID_NAME))) ";

    OracleConnection con = new OracleConnection(constr); { con.Open(); を試してください。ViewData["メッセージ"] = "接続済み"; con.Dispose(); } catch (例外例) {

    ViewData["メッセージ"] = ex.Message; }

  3. それでおしまい。うまくいきました。

于 2016-11-12T04:00:12.157 に答える
0

このエラーが発生する別のシナリオとして、IISExpress をローカルで使用してテストしている場合があります。

TNS エントリが追加または変更された場合、新しい値が適用されるように IISExpress を再起動する必要があります。

私の場合、アプリケーションをデバッグしていて、TNS エントリを変更するためにアプリケーションを停止しましたが、アプリケーションを再度実行しましたが、同じ IISExpress インスタンスを使用して API を実行しました。

アプリを停止して IISExpress を手動で閉じると、次回の実行時に TNSNAMES の変更が適切に機能するようになりました。

于 2020-09-11T21:14:04.220 に答える