如何不使用Oracle客戶端庫鏈接數據庫?

在用鏈接oracle數據庫的時候,常常會碰到以下問題:html

VS2010 + Oracle driver: ORA-12154: TSN:could not resolve the connect identifier specified

比較好的解決方案,是引用oracle dll 文件鏈接oralce數據庫,而不用依賴於安裝的oralce client.sql

步驟以下:數據庫

1. 從'Oracle Data Provider for .NET' 獲取DLLs包oracle

 能夠到 http://www.oracle.com/technetwork/topics/dotnet/index-085163.html 下載oracle 安裝文件。ide

2.引用DLLS到項目spa

搜索Oracle客戶端的安裝目錄,並將下列四個DLL複製到項目的Bin文件夾:orm

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

引用dll文件,Project --> Add Reference..., 點擊 Browse 選擇 Oracle.DataAccess.dll 文件.server

Oracle.DataAccess.dll 的Copy to Output Directory屬性中,設置 Copy always.htm

3.用全鏈接字符串blog

爲了避免必擔憂應用程序部署時TNS的設置問題,能夠用整個鏈接字符串以下:

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.");
            }
        }
    }
}

 

注:

 若是系統是X64位,用32的Oracle.DataAccess.dll 可能會出現以下問題:

Could not load file or assembly 'Oracle.DataAccess' or one of its dependencies. An attempt was made to load a program with an incorrect format.

解決方法:

設置Pool支持32位,以下:

 

 

相關文章
相關標籤/搜索