簡體   English   中英

嘗試在Unity上使用Oracle.DataAccess時無效的Cast Exception

[英]Invalid Cast Exception when trying to use Oracle.DataAccess on Unity

我幾天來一直處理一個問題,沒有任何進展。 我想在Unity上使用Oracle.DataAccess(C#的Oracle數據庫訪問)來進行輔助項目。 我安裝了Oracle客戶端以及數據庫(工作正常),在Assets文件夾中放置.Net 2.x的Oracle.DataAccess.dll文件(只有一個Unity識別)並開始編碼。 這是我在類中處理的應該處理所有數據庫通信的東西:

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

您的連接字符串似乎有誤。

  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 + ")))";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM