Search found 3 matches

by [email protected]
Mon 26 Sep 2011 07:51
Forum: dotConnect for Oracle
Topic: Custom XPO provider for dotConnect (Oracle)
Replies: 7
Views: 7185

Bug was not fixed properly. I've tested it on my small app.
by [email protected]
Thu 21 Jul 2011 07:25
Forum: dotConnect for Oracle
Topic: Custom XPO provider for dotConnect (Oracle)
Replies: 7
Views: 7185

The problem is that in the problematic query, parameters p0 and n are not preceded by colon:

insert into "XPObjectType"("TypeName","AssemblyName","OID")values(:p1,:p2,"sq_XPObjectType".nextval);select "sq_XPObjectType".CurrVal into p0 from DUAL;
n := 1; end;'

The reason is that setter from dotConnect's OracleParameter.ParameterName removes colon ":" from parameter's name. DevExpress needs to have parameter names with colon, but dotConnect removes this colons. Even when I set OracleUtils.OracleClientCompatible = true, it was not working.
by [email protected]
Mon 18 Jul 2011 16:00
Forum: dotConnect for Oracle
Topic: Custom XPO provider for dotConnect (Oracle)
Replies: 7
Views: 7185

Custom XPO provider for dotConnect (Oracle)

Hello,

I try to develop custom XPO provider for Devart dotConnect (Oracle) and use it with DevExpress Reporting. So far my custom provider looks like this:

Code: Select all

using System;
using System.Data;

using DevExpress.Xpo.DB;
using DevExpress.Xpo.DB.Helpers;

namespace Quickstarts.Reporting.Service.Host
{
    class DevartXpoProvider : BaseOracleConnectionProvider
    {

        public DevartXpoProvider(IDbConnection connection, AutoCreateOption autoCreateOption) : base(connection, autoCreateOption)
        {
        }

        public static IDataStore CreateProviderFromString(string connectionString, AutoCreateOption autoCreateOption, out IDisposable[] objectsToDisposeOnDisconnect)
        {
            IDbConnection connection = CreateConnection(connectionString);
            objectsToDisposeOnDisconnect = new IDisposable[1]
            {
                connection
            };
            return CreateProviderFromConnection(connection, autoCreateOption);
        }

        public static IDataStore CreateProviderFromConnection(IDbConnection connection, AutoCreateOption autoCreateOption)
        {
            return (IDataStore)new DevartXpoProvider(connection, autoCreateOption);
        }

        public static IDbConnection CreateConnection(string connectionString)
        {
            IDbConnection dbConnection = Devart.Data.Oracle.OracleProviderFactory.Instance.CreateConnection();
            dbConnection.ConnectionString = connectionString;
            return dbConnection;
        }

        protected override IDbConnection CreateConnection()
        {
            return CreateConnection(this.ConnectionString);
        }

        protected override void CommandBuilderDeriveParameters(IDbCommand command)
        {
            throw new NotImplementedException();
        }

        public static void Register()
        {
            DataStoreBase.RegisterDataStoreProvider(XpoProviderTypeString, new DataStoreCreationFromStringDelegate(CreateProviderFromString));
        }

        public const string XpoProviderTypeString = "DevartXpoProvider";
    }
}
Connection string in app.config looks like this:





When I tried to use this class in my existing project, I got the following DevExpress.Xpo.DB.Exceptions.SqlExecutionErrorException exception in reporting service’s constructor:

Executing Sql 'declare
begin
insert into "XPObjectType"("TypeName","AssemblyName","OID")values(:p1,:p2,"sq_XPObjectType".nextval);select "sq_XPObjectType".CurrVal into p0 from DUAL;
n := 1; end;' with parameters '{Null},{DevExpress.Xpf.Printing.Service.DataContracts.ServiceFault},{DevExpress.Xpf.Printing.v10.2.Service},{Null}' exception 'Devart.Data.Oracle.OracleException (0x80004005): ORA-01036 illegal variable name/number
at Devart.Data.Oracle.u.a(a0[] A_0, Byte[] A_1, Hashtable A_2)
at Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords, Boolean nonQuery)
at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery)
at Devart.Data.Oracle.OracleCommand.ExecuteNonQuery()
at DevExpress.Xpo.DB.BaseOracleConnectionProvider.Exec(IDbCommand command, Dictionary`2 parameters)'
at DevExpress.Xpo.DB.BaseOracleConnectionProvider.Exec(IDbCommand command, Dictionary`2 parameters)
at DevExpress.Xpo.DB.BaseOracleConnectionProvider.ProcessModifyData(ModificationStatement[] dmlStatements)
at DevExpress.Xpo.DB.DataStoreSerializedBase.ModifyData(ModificationStatement[] dmlStatements)
at DevExpress.Xpo.DB.ConnectionProviderSql.ModifyData(ModificationStatement[] dmlStatements)
at DevExpress.Xpo.SimpleDataLayer.ModifyData(ModificationStatement[] dmlStatements)
at DevExpress.Xpo.SimpleObjectLayer.CommitChanges(Session session, ICollection fullListForDelete, ICollection completeListForSave)
at DevExpress.Xpo.Session.FlushChangesInsideTransaction()
at DevExpress.Xpo.Session.FlushChanges()
at DevExpress.Xpo.Session.ProcessingProcess(ObjectSet markedObjectsHolder, Object theObject)
at DevExpress.Xpo.Session.Save(Object theObject)
at DevExpress.Xpo.SimpleObjectLayer.CreateObjectType(XPObjectType objectType)
at DevExpress.Xpo.Helpers.XPObjectTypesManager.GetObjectType(XPClassInfo objectType)
at DevExpress.Xpo.Session.GetObjectType(XPClassInfo objectType)
at DevExpress.Xpo.Session.CreateObjectTypeRecords(XPClassInfo[] types)
at DevExpress.Xpo.Session.CreateObjectTypeRecords(Assembly[] assemblies)
at DevExpress.Xpf.Printing.Service.Native.Services.SessionUtilityService.SafeInitialize()
at DevExpress.Xpf.Printing.Service.ExportService..ctor()

The Oracle DB was empty, before I ran this program. Do you have any idea what this exception means? Is there any problem with parameters used in command? Something related to "Original_" prefix?

Best Regards,
Peter