2017-05-27 13 views
0

私は数日間問題を処理していますが、何も進展していません。私は、サイドプロジェクトのためにOracle.DataAccess(C#のOracle DBアクセス)をUnityに使用したいと思います。私はOracleクライアントとデータベース(正常に動作している)をインストールし、.Net 2.x用のOracle.DataAccess.dllファイル(Unityが認識できるもののみ)をAssetsフォルダに置き、コーディングを開始しました。ここで私は、すべてのDB通信のものを扱うことになったクラスで入力したものです:ユニティで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); 
     } 
    } 
} 

オープン()を使用しようとしたら、それは私にこの例外を与える:

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

あなたの接続文字列が誤解されるようです。

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

ありがとう:

  1. 後に "+" 文字 "HOSTは=" そこに次の行を置き換えるために最後に

試しを逃す

  • 閉会括弧すべきではありません迅速な対応のために!残念ながら、あなたが見つけた間違いを修正しても、同じ例外がポップアップします。私はそれがそれにリンクしているとは思わない。 –

  • 関連する問題