Toon posts:

[C#/Access] JRO Replicatie werkt niet onder .Net

Pagina: 1
Acties:
  • 137 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik probeer middels C# twee Access databases te repliceren. Heb eerst met VBA getest en daar werkt onderstaande code goed:
Visual Basic .NET:
1
2
3
4
Dim Rep As New JRO.Replica
Rep.ActiveConnection = "C:\Slave.mdb"
Rep.Synchronize "C:\Master.mdb", jrSyncTypeImpExp, jrSyncModeDirect
Set Rep = Nothing

Tot dusver werkt het goed. Als ik echter in Visual Studio 2003 in C# de volgende code probeer:
C#:
1
2
3
4
5
6
7
8
9
10
11
try
{
  JRO.Replica rep = new JRO.Replica();              
  rep.ActiveConnection = @"C:\Slave.mdb";               
  rep.Synchronize(@"C:\Master.mdb", JRO.SyncTypeEnum.jrSyncTypeImpExp, JRO.SyncModeEnum.jrSyncModeDirect);              
}
catch(System.Runtime.InteropServices.COMException cexc)
{
  System.Console.WriteLine("An COM Exception has occured: "+cexc.Message);
}
System.Console.ReadLine();

Dan krijg ik een COM Exception op de regel 'rep.ActiveConnection = ...'
Deze exception luidt:
An COM Exception has occured: Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.
Ook als ik het in VB.Net probeer krijg ik precies dezelfde fout dus zal het in .Net->COM moeten zitten.
Wat ik al geprobeerd heb:
De string omzetten naar een Byte-array => zelfde fout.
Het internet afgestruind naar JRO.Replica implementaties => allen gaan uit van JRO.MakeReplica welke wel onder C#.Net werkt.

Wat trouwens nog van belang is is dat ActiveConnection een object i.p.v. een string verwacht. Vandaar dat ik dacht dat ik het misschien naar ASCII moest omzetten om Unicode<=>ASCII problemen te voorkomen; maar dat leek niet te helpen.

Nu mijn vraag: hoe krijg ik een .Net applicatie zover om middels JRO.Replica mijn db's te repliceren. Natuurlijk kan ik een tooltje maken (bijv. in Delphi of C++) die het wel doet en die aanroepen maar liefst zou ik het gewoon in m'n C# app implementeren.

Verwijderd

Laat ik voorop stellen dat ik JRO niet ken, maar ik heb even wat op het internet gezocht en vond iets interessants. Het lijkt namelijk alsof .ActiveConnection verschillende type data kan ontvangen, nl. een string (met een pad naar een database) en een AdoDb connection. Misschien dat er bij het omzetten van COM naar .Net zich daar een probleem voordoet.

Probeer eens iets als het volgende:
Visual Basic .NET:
1
2
3
AdoConn.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source =C:\slave.mdb"
AdoConn.Open(AdoConn.ConnectionString) 
rep.ActiveConnection =AdoConn 

Verwijderd

Topicstarter
Helemaal super! Dit was de oplossing! Bedankt.
Uiteindelijke code voor al degene die ook problemen kunnen tegenkomen:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
try
{
  ADODB.Connection adoCon = new ADODB.Connection();
  adoCon.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Slave.mdb";
  adoCon.Open(adoCon.ConnectionString, "", "", 0);
  JRO.Replica rep = new JRO.Replica();
  rep.ActiveConnection = adoCon;
  rep.Synchronize(@"C:\Master.mdb", JRO.SyncTypeEnum.jrSyncTypeImpExp, JRO.SyncModeEnum.jrSyncModeDirect);              
}
catch(System.Runtime.InteropServices.COMException cexc)
{
  System.Console.WriteLine("A COM Exception has occured: "+cexc.Message);
}
System.Console.ReadLine();