2017-05-27 55 views
0

我一直在处理几天的问题,没有取得任何进展。我想在Unity上使用Oracle.DataAccess(用于C#的Oracle数据库访问)来进行一个侧面项目。我安装了Oracle客户端和数据库(工作正常),将.Net 2.x的Oracle.DataAccess.dll文件(只有一个Unity识别)放在Assets文件夹中并开始编码。下面是我在应该处理所有DB沟通东西类类型:尝试在Unity上使用Oracle.DataAccess时出现无效的转换异常

using System; 
using System.Collections.Generic; 
using UnityEngine; 

using Oracle.DataAccess.Client; 
using Oracle.DataAccess.Types; 

public static class DBConnection 
{ 

    // 
    static string Host; 
    static int Port; 
    static string SID; 
    static string Username; 
    static string Password; 
    // 

    static bool Initialized = false; 
    public static void Initialize(string host, int port, string sid, string username, string password) 
    { 
     if (Initialized) throw new Exception("DBConnection was already initialized !"); 

     Host = host; 
     Port = port; 
     SID = sid; 
     Username = username; 
     Password = password; 
    } 

    static OracleConnection Connection; 
    public static void Open() 
    { 
     try 
     { 
      string connString = "user id=" + Username + ";password=" + Password + ";data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=+" + Host + ")(Port=" + 1521 + "))(CONNECT_DATA=(SERVICE_NAME=" + SID + "))"; 
      using (Connection = new OracleConnection(connString)) 
      { 
       // ... 
      } 
     } 
     catch (OracleException e) 
     { 
      Debug.LogError(e.ErrorCode); 
     } 
    } 
} 

在试图使用Open(),它给了我这样的例外:

InvalidCastException: Cannot cast from source type to destination type. 
Oracle.DataAccess.Client.CThreadPool..cctor() 
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for Oracle.DataAccess.Client.CThreadPool 
Oracle.DataAccess.Client.OracleInit.Initialize() 
Oracle.DataAccess.Client.OracleConnection..cctor() 
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for Oracle.DataAccess.Client.OracleConnection 
DBConnection.Open() (at Assets/Sources/Database/DBConnection.cs:37) 
Game.Start() (at Assets/Sources/Game/Game.cs:10) 

我仍然想不通从哪里来。连接字符串是正确的:在构建OracleConnection对象期间发生异常(通过在创建对象后分配连接字符串来确保它)。 DLL是64位,编辑器是64位,Oracle客户端也是64位。数据库工作正常(设法连接到SQL开发者),坦白说,我刚刚脱颖而出。这有没有发生过你们中的任何一个?

在此先感谢谁救我:d

回答

0

连接字符串似乎是错误的。

  1. 后 “+” 字符 “HOST =” 不应该有
  2. 右括号在年底失踪

尝试用以下替换行:

string connString = "user id=" + Username + ";password=" + Password + ";data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=" + Host + ")(Port=" + 1521 + "))(CONNECT_DATA=(SERVICE_NAME=" + SID + ")))"; 
+0

谢谢为了快速反应!不幸的是,即使我纠正了你发现的错误,也会出现同样的异常。我不认为它与此有关。 –

相关问题