sql >> データベース >  >> RDS >> Oracle

VS2010 + Oracleドライバ:ORA-12154:TSN:指定された接続識別子を解決できませんでした

    私が見つけた最善の解決策は、Oracle Data Access Clientライブラリを使用し、TNS名のエントリ全体を接続文字列に含めることでした。これにより、プロジェクトをWebサーバーやClickOnceなどに簡単に公開できます。

    プロジェクトで動作するOracleドライバを設定するために必要な手順は次のとおりです。

    1)「OracleDataProviderfor.NET」パッケージからDLLを取得します

    次の場所からインストーラファイルをダウンロードします: http://www.oracle。 com / technetwork / topics / dotnet / index-085163.html

    先に進んで、VisualStudio用のOracleDeveloperToolsを使用して200MBのODAC全体をインストールしましたが、実際に必要なのは、このダウンロードから4つのDLLだけです。 (インストールプロセス全体を実行する代わりに、インストーラーパッケージから直接抽出できる場合があります。または、小さなダウンロードの1つにすべてが含まれている場合もあります。)

    2)プロジェクト内の参照DLL

    Oracle Data Access Clientのインストール・ディレクトリを検索し、次の4つのDLLをプロジェクトのルートにドラッグします。

    • Oracle.DataAccess.dll
    • oci.dll
    • oraciicus11.dll
    • OraOps11w.dll

    出力ディレクトリにコピーを設定します Oracle.DataAccess.dllを除くすべてのファイルを常にコピーするプロパティ 。

    プロジェクトの下 ->参照を追加...参照をクリックします タブをクリックして、Oracle.DataAccess.dllファイルを選択します。

    3)完全な接続文字列でドライバーを使用します(オプション)

    アプリケーションがデプロイされたマシンに設定されているTNS名ファイルについて心配する必要がないように、 connectionstrings.com 。接続文字列が少しかさばりますが、以前に経験したTNSNamesファイルの頭痛の種の多くを取り除きました:

    Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=servername)(PORT=‌​1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));User Id=username;Password=********;
    

    これが私がドライバーをテストするために使用した完全なクラスです:

    using System;
    using System.Data;
    using Oracle.DataAccess.Client;
    
    static class Program
    {
        [STAThread]
        static void Main()
        {
            TestOracle();
        }
    
        private static void TestOracle()
        {
            string connString = 
                "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)" + 
                "(HOST=servername)(PORT=‌​1521)))" +
                "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=servicename)));"+ 
                "User Id=username;Password=********;";
            using (OracleConnection conn = new OracleConnection(connString))
            {
                string sqlSelect = "SELECT * FROM TEST_TABLE";
                using (OracleDataAdapter da = new OracleDataAdapter(sqlSelect, conn))
                {
                    var table = new DataTable();
                    da.Fill(table);
    
                    if (table.Rows.Count > 1) 
                        Console.WriteLine("Successfully read oracle.");
                }
            }
        }
    }
    


    1. Hibernateで複合主キーのIDを自動インクリメントするにはどうすればよいですか?

    2. mysql select top n max values

    3. LinqToSqlおよびidentity_insert

    4. TNSリスナーエラー