Search found 4 matches

by debop
Sat 17 Sep 2011 10:25
Forum: dotConnect for Oracle
Topic: DevartOracleDriver for NHibernate 3.2
Replies: 1
Views: 1944

DevartOracleDriver for NHibernate 3.2

I created DevartOracleDriver for NHibernate 3.2

code :
Devart.Data.Oracle.OracleUtils.OracleClientCompatible = true;

is implemented by reflection for not referencing Devart.Data.Oracle.dll in Core Project




using System;
using System.Reflection;
using NHibernate.AdoNet;

namespace NHibernate.Driver
{
///
/// NHibernate에서 사용할 Oracle용 Driver입니다. Devart dotConnector for Oracle 라이브러리를 사용합니다.
/// 참고 : http://www.devart.com/blogs/dotconnect/?p=1857 (Old Version)
/// 참고 : http://www.devart.com/forums/viewtopic.php?t=15685 (New Version)
///
///
/// NHibernate configuration 속성 중에 connection.driver_class 값을
/// "NHibernate.Driver.DevartOracleDriver, RCL.Data.DevartOracle" 로 해주면 Oracle Driver를 Devart.Data.Oracle.dll을 사용합니다.
/// NOTE: NHIbernate configuration 에 qualifyAssembly 를 정의하여, Devart.Data.Oracle.dll의 QualifiedAssemblyName을 등록해주어야 합니다.
/// NOTE: http://www.devart.com/blogs/dotconnect/?p=1857 의 4번, 5번 항을 주의하세요.
///
///
///
/// // hibernate.cfg.xml 에서 다음과 같이 설정하시면 됩니다.
/// NHibernate.Driver.DevartOracleDriver, RCL.Data.DevartOracle
///
///
public sealed class DevartOracleDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider
{
#region >

private static readonly NLog.Logger log = NLog.LogManager.GetCurrentClassLogger();

#endregion

private const string CommandTypeName = "Devart.Data.Oracle.NHibernate.NHibernateOracleCommand";
private const string ConnectionTypeName = "Devart.Data.Oracle.NHibernate.NHibernateOracleConnection";
private const string DriverAssemblyName = "Devart.Data.Oracle";

///
/// Constructor
///
public DevartOracleDriver()
: base(DriverAssemblyName, ConnectionTypeName, CommandTypeName)
{
if(log.IsInfoEnabled)
log.Info("NHibernate용 DevartOracleDriver를 생성했습니다.");

Intialize();
}

public override bool UseNamedPrefixInSql
{
get { return true; }
}

public override bool UseNamedPrefixInParameter
{
get { return true; }
}

public override string NamedPrefix
{
get { return ":"; }
}

System.Type IEmbeddedBatcherFactoryProvider.BatcherFactoryClass
{
get { return typeof(OracleDataClientBatchingBatcherFactory); }
}

///
///
///
private void Intialize()
{
// NOTE: NHibernate 3.2 이상에서 Devart Oracle의 Parameter 작업이 이상 작동하는 것을 교정하기 위해 OracleClientCompatible 필드 값을 True로 설정합니다.
// 참고: http://www.devart.com/forums/viewtopic.php?t=21676

const string DevartDataOracleAssemblyName = "Devart.Data.Oracle";
const string OracleUtilsTypeName = "Devart.Data.Oracle.OracleUtils";
const string OracleClientCompatibleFieldName = "OracleClientCompatible";

if(log.IsInfoEnabled)
{
log.Info("Devart.Data.Oracle.OracleUtils.OracleClientCompatible 값을 true로 설정합니다...");
log.Info("NHibernate 3.2 이상에서 Devart Oracle의 Parameter 작업이 이상 작동하는 것을 교정하기 위해 OracleClientCompatible 필드 값을 True로 설정합니다.");
}

try
{
var asm = Assembly.Load(DevartDataOracleAssemblyName);
var type = asm.GetType(OracleUtilsTypeName);
var fi = type.GetField(OracleClientCompatibleFieldName, BindingFlags.Public | BindingFlags.Static);
fi.SetValue(null, true);
}
catch(Exception ex)
{
if(log.IsErrorEnabled)
log.ErrorException("Devart.Data.Oracle.OracleUtils.OracleClientCompatible 값을 true로 설정하는데 예외가 발생했습니다.", ex);

throw;
}
}
}
}
by debop
Thu 15 Sep 2011 18:09
Forum: dotConnect for Oracle
Topic: NHibernate 3.2 GA and Parameter Name error
Replies: 13
Views: 6907

NHibernate 3.2 GA and Parameter Name error

Using dotConnector for Oracle 6.50.214.0 and NHibernate 3.2 GA.

Not solve parameter naming error.


Test by QueryOver

[ SELECT this_.COMPANY_ID as COMPANY1_4_0_, this_.COMPANY_CODE as COMPANY2_4_0_, this_.COMPANY_NAME as COMPANY3_4_0_, this_.UpdateTimestamp as UpdateTi4_4_0_ FROM NH_COMPANY this_ WHERE this_.COMPANY_CODE = :p0 ]
Name:cp0 - Value:NHibernate
[SQL: SELECT this_.COMPANY_ID as COMPANY1_4_0_, this_.COMPANY_CODE as COMPANY2_4_0_, this_.COMPANY_NAME as COMPANY3_4_0_, this_.UpdateTimestamp as UpdateTi4_4_0_ FROM NH_COMPANY this_ WHERE this_.COMPANY_CODE = :p0]
----> Devart.Data.Oracle.OracleException : ORA-01008: not all variables bound


Other test (LINQ)

NHibernate.Exceptions.GenericADOException : could not execute query
[ select company0_.COMPANY_ID as COMPANY1_4_, company0_.COMPANY_CODE as COMPANY2_4_, company0_.COMPANY_NAME as COMPANY3_4_, company0_.UpdateTimestamp as UpdateTi4_4_ from NH_COMPANY company0_ where company0_.COMPANY_CODE=:p0 ]
Name:p1 - Value:REALWEB
[SQL: select company0_.COMPANY_ID as COMPANY1_4_, company0_.COMPANY_CODE as COMPANY2_4_, company0_.COMPANY_NAME as COMPANY3_4_, company0_.UpdateTimestamp as UpdateTi4_4_ from NH_COMPANY company0_ where company0_.COMPANY_CODE=:p0]
----> Devart.Data.Oracle.OracleException : ORA-01008: not all variables bound

set Direct = true.

Did I mistake ?

if NHibernate 3.1 GA, no problem.
by debop
Sat 20 Aug 2011 15:42
Forum: dotConnect Universal
Topic: Need for NHibernate Driver
Replies: 1
Views: 1977

Need for NHibernate Driver

I used dotConnector for Oracle, and now use dotConnect Universal

I made Devart Oracle Driver for NHibernate like this

public DevartOracleDriver() : base("Devart.Data.Oracle", "Devart.Data.Oracle.NHibernate.NHibernateOracleConnection", "Devart.Data.Oracle.NHibernate.NHibernateOracleCommand")

but dotConnect Universal was obucasted NHibernateOracleConnection, NHibernateOracleCommand !!!

I modify Driver like this

public DevartOracleDriver() : base("Devart.Data.Universal.Oracle",
"Devart.Data.Oracle.NHibernate.a",
"Devart.Data.Oracle.NHibernate.b")

.....

Please don't obscast Class name
by debop
Wed 10 Aug 2011 01:16
Forum: dotConnect for Oracle
Topic: NHibernate 3.2 GA and Direct Mode raise Error
Replies: 1
Views: 1329

NHibernate 3.2 GA and Direct Mode raise Error

I used dotConnect for Oracle and NHibernate 3.1 GA. it all right !!!

but upgrade to NHibernate 3.2 GA, raise ORA-01008: not all variables bound

need :p0 but :p1

I won't use indirect mode... should use direct mode...


==========================================================

2011-08-10 01:12:40.1844 [6] [Error] [RCL.Data.NH.NLogLogger.Error]#
ORA-01008: not all variables bound
2011-08-10 01:12:40.1844 [6] [Debug] [RCL.Data.NH.NLogLogger.Debug]#
after autocommit
2011-08-10 01:12:40.1844 [6] [Debug] [RCL.Data.NH.NLogLogger.Debug]#
transaction completion
2011-08-10 01:12:40.1844 [6] [Debug] [RCL.Data.NH.NLogLogger.Debug]#
aggressively releasing database connection
Test 'RCL.Data.DevartOracle.NH.Domains.MappingTestCase.SimpleEntity'
failed: NHibernate.Exceptions.GenericADOException : could not execute
query
[ select company0_.COMPANY_ID as COMPANY1_2_, company0_.COMPANY_CODE
as COMPANY2_2_, company0_.COMPANY_NAME as COMPANY3_2_,
company0_.UpdateTimestamp as UpdateTi4_2_ from NH_COMPANY company0_
where company0_.COMPANY_CODE=:p0 ]
Name:p1 - Value:REALWEB
[SQL: select company0_.COMPANY_ID as COMPANY1_2_,
company0_.COMPANY_CODE as COMPANY2_2_, company0_.COMPANY_NAME as
COMPANY3_2_, company0_.UpdateTimestamp as UpdateTi4_2_ from NH_COMPANY
company0_ where company0_.COMPANY_CODE=:p0]
----> Devart.Data.Oracle.OracleException : ORA-01008: not all
variables bound
위치: NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)
위치: NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor
session, QueryParameters queryParameters)
위치:
NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor
session, QueryParameters queryParameters)
위치:
NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor
session, QueryParameters queryParameters)
위치: NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters
queryParameters, ISessionImplementor session, IList results)
위치: NHibernate.Impl.SessionImpl.List(IQueryExpression
queryExpression, QueryParameters queryParameters, IList results)
위치: NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression
queryExpression, QueryParameters parameters)
위치: NHibernate.Impl.ExpressionQueryImpl.List()
위치:
NHibernate.Linq.DefaultQueryProvider.ExecuteQuery(NhLinqExpression
nhLinqExpression, IQuery query, NhLinqExpression nhQuery)
위치: NHibernate.Linq.DefaultQueryProvider.Execute(Expression
expression)
위치: NHibernate.Linq.DefaultQueryProvider.Execute[TResult](Expression
expression)
위치: System.Linq.Queryable.Single[TSource](IQueryable`1 source)
D:\RealWeb Products\RCL\RCL-svn\RCL-Data\RCL.Data.DevartOracle.Test\NH
\Domains\MappingTestCase.cs(23,0): 위치:
RCL.Data.DevartOracle.NH.Domains.MappingTestCase.SimpleEntity()
--OracleException
위치: Devart.Data.Oracle.ao.d()
위치: Devart.Data.Oracle.x.m()
위치: Devart.Data.Oracle.x.c()
위치: Devart.Data.Oracle.u.a(Int32 A_0, bf A_1)
위치: Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior
behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords,
Boolean nonQuery)
위치: Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior
behavior, Boolean nonQuery)
위치:
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()
위치: NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
위치: NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean
autoDiscoverTypes, Boolean callable, RowSelection selection,
ISessionImplementor session)
위치: NHibernate.Loader.Loader.DoQuery(ISessionImplementor session,
QueryParameters queryParameters, Boolean returnProxies)
위치:
NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor
session, QueryParameters queryParameters, Boolean returnProxies)
위치: NHibernate.Loader.Loader.DoList(ISessionImplementor session,
QueryParameters queryParameters)