Подружить Unity и Oracle! (Решено)

Общие вопросы о Unity3D

Подружить Unity и Oracle! (Решено)

Сообщение korobtsov 28 авг 2013, 20:19

Уважаемые комрады!

Подскажите как из Unity подключиться к БД на Оracle?
В сети нашел пример, но он выдает ошибку:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;
using System.Data.OracleClient;

public class Connection : MonoBehaviour {

    static void Update(){
    OracleConnection con = new OracleConnection();
 
    //using connection string attributes to connect to Oracle Database
    con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle";
    con.Open();
    Console.WriteLine("Connected to Oracle" + con.ServerVersion);
   
    // Close and Dispose OracleConnection object
    con.Close();
    con.Dispose();
    Console.WriteLine("Disconnected");
  }    
 


System.Data.OracleClient.dll положил в папку plugins
Ошибка:
Internal compiler error. See the console log for more information. output was:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.

File name: 'System.EnterpriseServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'

at (wrapper managed-to-native) System.Reflection.MonoMethodInfo:get_method_info (intptr,System.Reflection.MonoMethodInfo&)

at System.Reflection.MonoMethodInfo.GetMethodInfo (IntPtr handle) [0x00000] in <filename unknown>:0

at System.Reflection.MonoMethodInfo.GetAttributes (IntPtr handle) [0x00000] in <filename unknown>:0

at System.Reflection.MonoMethod.get_Attributes () [0x00000] in <filename unknown>:0

at System.Reflection.MethodBase.get_IsVirtual () [0x00000] in <filename unknown>:0

at Mono.CSharp.MemberCache.AddMethods (BindingFlags bf, System.Type type) [0x00000] in <filename unknown>:0

at Mono.CSharp.MemberCache.AddMethods (System.Type type) [0x00000] in <filename unknown>:0

at Mono.CSharp.MemberCache..ctor (IMemberContainer container) [0x00000] in <filename unknown>:0

at Mono.CSharp.TypeHandle..ctor (System.Type type) [0x00000] in <filename unknown>:0

at Mono.CSharp.TypeHandle.GetTypeHandle (System.Type t) [0x00000] in <filename unknown>:0

at Mono.CSharp.TypeHandle.GetMemberCache (System.Type t) [0x00000] in <filename unknown>:0

at Mono.CSharp.TypeManager.MemberLookup_FindMembers (System.Type t, MemberTypes mt, BindingFlags bf, System.String name, System.Boolean& used_cache) [0x00000] in <filename unknown>:0

at Mono.CSharp.TypeManager.RealMemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes mt, BindingFlags original_bf, System.String name, IList almost_match) [0x00000] in <filename unknown>:0

at Mono.CSharp.TypeManager.MemberLookup (System.Type invocation_type, System.Type qualifier_type, System.Type queried_type, MemberTypes mt, BindingFlags original_bf, System.String name, IList almost_match) [0x00000] in <filename unknown>:0

at Mono.CSharp.Expression.MemberLookup (Mono.CSharp.CompilerContext ctx, System.Type container_type, System.Type qualifier_type, System.Type queried_type, System.String name, MemberTypes mt, BindingFlags bf, Location loc) [0x00000] in <filename unknown>:0

at Mono.CSharp.Expression.MemberLookupFinal (Mono.CSharp.ResolveContext ec, System.Type qualifier_type, System.Type queried_type, System.String name, MemberTypes mt, BindingFlags bf, Location loc) [0x00000] in <filename unknown>:0

at Mono.CSharp.New.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec, ResolveFlags flags) [0x00000] in <filename unknown>:0

at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Assign.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.SimpleAssign.DoResolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec, ResolveFlags flags) [0x00000] in <filename unknown>:0

at Mono.CSharp.Expression.Resolve (Mono.CSharp.ResolveContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.ExpressionStatement.ResolveStatement (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.StatementExpression.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.Block.Resolve (Mono.CSharp.BlockContext ec) [0x00000] in <filename unknown>:0

at Mono.CSharp.ToplevelBlock.Resolve (Mono.CSharp.FlowBranching parent, Mono.CSharp.BlockContext rc, Mono.CSharp.ParametersCompiled ip, IMethodData md) [0x00000] in <filename unknown>:0

Либы пробовал разных версий подсовывать, ошибка сохраняется.
Кто в теме, подскажите, пожалуйста, куда копать.
Последний раз редактировалось korobtsov 30 авг 2013, 12:04, всего редактировалось 1 раз.
korobtsov
UNец
 
Сообщения: 22
Зарегистрирован: 02 мар 2011, 19:49

Re: Подружить Unity и Oracle!

Сообщение seaman 28 авг 2013, 20:26

Читайте что написано. Для работы нужны допdll. Пока указывает на одну - System.EnterpriseServices. Положи ее в Plugins - увидишь еще кучу. Может постепенно добавишь все что надо.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Подружить Unity и Oracle!

Сообщение korobtsov 28 авг 2013, 21:23

seaman писал(а):Читайте что написано. Для работы нужны допdll. Пока указывает на одну - System.EnterpriseServices. Положи ее в Plugins - увидишь еще кучу. Может постепенно добавишь все что надо.



Да, прогнал.

Но после того, как положил все dll,
такое сообщение:
Internal compiler error. See the console log for more information. output was:error CS1509: Referenced file `System.EnterpriseServices.Wrapper.dll' is not an assembly. Consider using `-addmodule' option instead

System.EnterpriseServices.Wrapper.dll там лежит и прописан в using
korobtsov
UNец
 
Сообщения: 22
Зарегистрирован: 02 мар 2011, 19:49

Re: Подружить Unity и Oracle!

Сообщение Acrobat 28 авг 2013, 21:32

Oracle осень серьезная вещь. Чтобы ей пользоваться ннадо не столько знать, сколько понимать чего делаешь. Oracle дружелюбный очень.
Acrobat
UNITрон
 
Сообщения: 182
Зарегистрирован: 08 дек 2011, 16:16
Откуда: г. Нижний Новгород

Re: Подружить Unity и Oracle!

Сообщение seaman 28 авг 2013, 22:06

is not an assembly

как бы говорит, что либо кривая сборка, либо внутри нативный код, а у Вас ФРИ.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Подружить Unity и Oracle!

Сообщение korobtsov 29 авг 2013, 12:42

Использую триальную версию Unity Pro.
Либы (System.EnterpriseServices.Wrapper.dll) брал из разных источников (4 разных версии.)
korobtsov
UNец
 
Сообщения: 22
Зарегистрирован: 02 мар 2011, 19:49

Re: Подружить Unity и Oracle!

Сообщение korobtsov 29 авг 2013, 13:18

Нашел другой пример:
Синтаксис:
Используется csharp

using UnityEngine;
using System.Collections;
using System;
using System.Data;
using System.Data.OleDb;

public class Connection : MonoBehaviour {
        void Start () {
                Main();
        }

        public static void Main(){
            string connectionString = "provider=MSDAORA;data source=ORCL;user id=SCOTT;password=TIGER";
                OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);             
                OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();       
                myOleDbCommand.CommandText = "SELECT empno, ename, sal FROM emp WHERE empno = 7369";           
                myOleDbConnection.Open();              
                OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader();            
                myOleDbDataReader.Read();
               
                myOleDbDataReader.Close();
                myOleDbConnection.Close();
        }                      
}


 


Ругается на отсутствие поддержки нативного кода:

MissingMethodException: Method contains unsupported native code
<Module>.<CrtImplementationDetails>.LanguageSupport._Initialize (<CrtImplementationDetails>.LanguageSupport* )
<Module>.<CrtImplementationDetails>.LanguageSupport.Initialize (<CrtImplementationDetails>.LanguageSupport* )
Rethrow as ModuleLoadException: The C++ module failed to load.
<Module>.<CrtImplementationDetails>.LanguageSupport.Initialize (<CrtImplementationDetails>.LanguageSupport* )
<Module>..cctor ()
Rethrow as TypeInitializationException: An exception was thrown by the type initializer for <Module>


В данном случае запускал на фри версии, может на про все будет ОК?
Или проблема в другом?
korobtsov
UNец
 
Сообщения: 22
Зарегистрирован: 02 мар 2011, 19:49

Re: Подружить Unity и Oracle!

Сообщение korobtsov 30 авг 2013, 12:04

Ларчик просто открывался.
Нужно было либы в plugins положить ИЗ ...\Editor\Data\Mono\lib\mono\2.0
-System.Data.dll
-System.Data.OracleClient.dll
-System.EnterpriseServices.dll

А в ...Oracle\network\Admin положить tnsnames.ora, настроенный на базу

Код:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System;
using System.Data;
using System.Data.OracleClient;
using System.Data.OleDb;

public class Connection : MonoBehaviour {
        void Start () {
                Main();
        }

    public static void Main(){
    OracleConnection con = new OracleConnection();
 
    //using connection string attributes to connect to Oracle Database
    con.ConnectionString = "User Id=usrname;Password=pas$$;Data Source=dbname";
    con.Open();
    Console.WriteLine("Connected to Oracle" + con.ServerVersion);
    Debug.Log("Connected to Oracle" + con.ServerVersion);
    // Close and Dispose OracleConnection object
    con.Close();
    con.Dispose();
    Console.WriteLine("Disconnected");
  }    

 


Всем спасибо за проявленное внимание!
korobtsov
UNец
 
Сообщения: 22
Зарегистрирован: 02 мар 2011, 19:49


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9