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