Bonjour,

J'utilise ASE 15. La couche d'accès aux données est dans un service WCF. Avec OleDB, j'obtiens un AccessViolationException à l'appel du dataAdapter.Fill(myDataSet). Le message indique que la mémoire doit être corrrompue. Cela n'arrive que lorsque +sieurs appels sont lancée en même temps sur le service.

Cela fonctionne bien quand il n'y a qu'un seul utilisateur. En fait l'erreur arrive seulement lors d'un appel particulier au service WCF qui fait de longs calculs qui nécessitent +sieurs appels à la bd. Mon service s'instancie PerCall.

Mes objects IDisposables sont dans des clauses Using
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
    String sConnectionString = ConfigurationManager.ConnectionStrings[user.Environnement].ConnectionString + "UID=" + user.Nom + ";PWD=" + user.Password;
    using (OleDbConnection connection = new OleDbConnection(sConnectionString))
    {
        connection.Open();
        OleDbCommand command = new OleDbCommand(BuildQueryPortefeuilleRND(portefeuille.ClePRF, dateFrom, dateTo, user), connection);
        using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter(command))
        {
            dbAdapter.Fill(resultsDataSet.PRF_HIST_RND_VU);
        }
        connection.Close();
 
    }
    return resultsDataSet;
J'ai essayé avec ODBC et mon application fonctionne comme un charme sur mon PC 32bit. Par contre, cela ne fonctionne pas sur le server Win 2003 64. Je crois que Sybase not sorti odbc 64 avec le EBF 13579 mais nousne l'avons pas au bureau.

J'ai aussi essayé Sybase.Data.AseClient.dll mais encore la, cette dll utilise une dll unmanaged 32 bits sybdrvado115.dll que je ne trouve pas pour le 64 bits. Après 3 jours de recherches intensives dans les forums, dans google, je n'ai vu aucun thread réellement aboutir sur une solution.

Le provider OleDB pour Sybase est-il réellement truffé de bugs, faut-il passer à ODBC... peut-on utiliser ASE ODBC sur x64?

J'ai essayé de compiler mon projet .NET en Any CPU, x86, x64.

Je serai éternellement reconnaissant envers la personne qui trouvera quelque chose là-dessus. J'espère avoir niclu le max de détails requis.

Exception: System.AccessViolationException

Message: Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.

StackTrace: à System.Data.Common.UnsafeNativeMethods.IRowset.GetData(IntPtr hRow, IntPtr hAccessor, IntPtr pData)
à System.Data.OleDb.OleDbDataReader.GetRowDataFromHandle()
à System.Data.OleDb.OleDbDataReader.GetValueBinding(MetaData info)
à System.Data.OleDb.OleDbDataReader.GetValues(Object[] values)
à System.Data.ProviderBase.DataReaderContainer.CommonLanguageSubsetDataReader.GetValues(Object[] values)
à System.Data.ProviderBase.SchemaMapping.LoadDataRow()
à System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
à System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
à System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
à System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
à System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
à System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
à CDP.MAR.Core.Model.Database.SybaseConnection.GetPortefeuilleRND(Portefeuille portefeuille, DateTime dateFrom, DateTime dateTo, ClientUser user) dans c:\Projets\Visual Studio 2008\Projects\CDP.MAR\CDP.MAR.Core\Model\Database\SybaseConnection.cs:ligne 752
à CDP.MAR.Core.Dao.DaoSybase.GetPortefeuilleRND(Portefeuille portefeuille, DateTime fromDate, DateTime toDate) dans c:\Projets\Visual Studio 2008\Projects\CDP.MAR\CDP.MAR.Core\Dao\DaoSybase.cs:ligne 345