Hello,

I am using NHibernate 3.0 with an Oracle 11g backend database.  My
NHibernate config items include:

<add key="connection.provider"
value="NHibernate.Connection.DriverConnectionProvider" />
    <add key="connection.dialect"
value="NHibernate.Dialect.Oracle10gDialect" />
    <add key="connection.driver_class"
value="NHibernate.Driver.OracleClientDriver" />
    <add key="proxyfactory.factory_class"
value="NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle"
 /
>


 From the beginning, I was using the .NET's System.Data.OracleClient
library as my API for connections to the database.  I have recently
found out that I need to change and use the Oracle.DataAccess.dll
(ODP.NET) instead.  To do this I removed my project's reference to the
System.Data.OracleClient and added the reference Oracle.DataAccess.
In doing so, I needed to make some changes to my code regarding things
like OracleLob objects and OracleParameters.  When I run my app,
however, I get errors related to object casting problems which are
related to connection parameters.  When I need to call a stored
procedure, for example, I might do something like:

using (ISession session = NHibernateHelper.OpenSession()) {
                using (IDbConnection conn = session.Connection) {
                    using (IDbTransaction trans =
conn.BeginTransaction()) {
                        try {
                            // The initial connection was made.  Now
we need to call a stored procedure
                            // to get the DB username of this user.
                            IDbCommand cmd = conn.CreateCommand();
                            cmd.Transaction = trans;
                            cmd.CommandType =
CommandType.StoredProcedure;

                             IDbDataParameter param =
cmd.CreateParameter();
                            param.ParameterName = "USERNAME";
                            param.DbType = DbType.String;
                            param.Size = 100;
                            param.Direction =
ParameterDirection.ReturnValue;
                            cmd.Parameters.Add(param);

                            cmd.CommandText =
"tmt_common.pkg_tmt_ult.func_get_curr_tmt_user";
                            cmd.ExecuteNonQuery();

                             dbname = (String) ((OracleParameter)
cmd.Parameters["USERNAME"]).Value;

                        }catch (Exception ex) {
                            throw new Exception("Error calling package
function for TMT user name: " + ex.ToString());
                        }
                    }
                }
            }


The error is:

System.InvalidCastException: Unable to cast object of type
'System.Data.OracleClient.OracleParameter' to type
'Oracle.DataAccess.Client.OracleParameter'.

I found that my connection is actually a
System.Data.OracleClient.OracleConnection rather than an
Oracle.DataAccess.Client.OracleConnection even though neither my
project nor my class has a reference to the System.Data.OracleClient
API.

I must be missing something unless the NHibernate API itself is using
the System.Data.OracleClient and it doesn't matter what I am using,
but that would seem odd.

Does anyone know what I may be missing or why I am still seeing
System.Data.OracleClient API references?

Thanks for your time - Peter

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to