2011-09-27 58 views
2

我正在使用Visual Studio 2008和Oracle數據庫10g。錯誤「無法找到請求的.Net Framework數據提供程序。它可能未安裝」

我試圖連接到後端這樣的:

子窗口「服務器資源管理器」。按下「連接到數據庫」並創建下一個鏈接 數據連接 - >選擇數據源 - > Oracle數據庫 - > oracle數據提供程序.Net->繼續 - >數據源名稱:oraclexe-> Userneme:hr密碼:hr - >測試連接(回答 「連接測試成功」) - >按鈕OK和:

"Unable to find the requested .Net Framework Data Provider. It May not be installed" 

我已經修改了machine.config中

<add name="Oracle Data Provider for .NET" 
invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" 
type="Oracle.DataAccess.Client.OracleClientFactory, 
Oracle.DataAccess, Version=2.111.6.20, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 

但隨後以同樣的錯誤仍然存​​在。該怎麼辦?

+0

在機器的配置什麼樣的變化?請使用GAC中提供的版本進行版本匹配? – V4Vendetta

回答

1

Oracle數據提供程序特定於某個體系結構。如果您下載64位驅動程序,則需要將應用程序構建爲64位(如果目標OS爲64位,則爲AnyCPU)。

問題是Visual Studio是32位的,所以你還需要安裝一個32位驅動程序。

0

一對夫婦的建議:

  1. 不要使用EF測試版。如果是這樣,請使用32位版本。該驅動程序沒有像2010年10月發佈的那樣工作,安裝時64位應用程序的配置錯誤,而odac dll被放置在錯誤的系統文件夾中,除了其他問題。
  2. 堅持使用ado.net並在處理項目之前做一些簡單的查詢,如果您使用別人的項目或從某處下載它。
  3. Visual Studio項目文件爲項目文件中的程序集保留建議的位置,查找這些項目文件並刪除「提示」路徑(如果這是他人的項目)。
  4. 下載並安裝客戶端文件: http://www.oracle.com/technology/software/tech/windows/odpnet/index.html因爲您沒有指定安裝了客戶端文件。

總之,您可能使用設計工具的一個版本的驅動程序,而另一個版本的基礎連接。我知道這聽起來很奇怪,但我已經遇到過好幾次了。唯一的出路就是把它分開。如果你從一個ADO.NET基礎連接測試開始,你會發現問題。

下面是一個簡單的上手連接。

感謝,

阿爾

using System; 
using System.Data.Common; 
using Oracle.DataAccess.Client; 

namespace EntityFrameworkForOracle 
{ 
    internal class Test1Connection 
    { 
     internal void InternalTestRead() 
     { 
      using (var con = Database.GetLocalConnection()) 
      { 
       con.Open(); 
       var cmd = Database.GetCommand(con); 

       const string sql = @"select * 
          from TESTTABLE"; 

       cmd.CommandText = sql; 
       var reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        Console.WriteLine("\t{0}\t{1}", reader[0], reader[1]); 
       } 

       reader.Close(); 

       con.Close(); 
       con.Dispose(); 

       cmd.Dispose(); 
      } 
     } 

    } 

    public static class Database 
    { 
     private const string ProviderName = "Oracle.DataAccess.Client"; 
     private const string LocalConnectionString = "User Id=system;Password=XXX;Data Source=localhost:XXXX/XXXX;enlist=true;pooling=true"; 

     private static readonly DbProviderFactory Factory = DbProviderFactories.GetFactory(ProviderName); 

     public static DbCommand GetCommand(DbConnection con) 
     { 
      var cmd = Factory.CreateCommand(); 
      if (cmd != null) 
      { 
       cmd.Connection = con; 

       return cmd; 
      } 
      return null; 
     } 

     public static DbCommand GetCommand(string cmdText, DbConnection con) 
     { 
      var cmd = GetCommand(con); 
      cmd.CommandText = cmdText; 

      return cmd; 
     } 

     public static DbConnection GetLocalConnection() 
     { 
      var con = Factory.CreateConnection(); 
      if (con != null) 
      { 
       con.ConnectionString = LocalConnectionString; 

       return con; 
      } 
      return null; 
     } 

     public static void CloseConnection(OracleConnection connection) 
     { 
      connection.Close(); 
      connection.Dispose(); 
     } 
    } 

} 
相關問題