Jag har ett rätt stora probem med ADOX som jag inte förstår. Jag har en Access-databas som jag behöver ändra länkarna i. Vad jag vet kan detta enbart göras med ADOX samt DAO och då känns det som att ADOX är att föredra... Gahhh, man kan ju inte koppla en ADO.NET Connection till ADOX!!! Skapar jag en ADO-connection och kopplar till ADOX-objektet fungerar det. Men det är fortfarande konstigt att det inte fungerar att skicka med enbart connectionstring som det gör i VB6...ADOX i .NET
Jag har gjort ett litet exempel i VB6 som fungerar bra:Dim ADOXCat As New ADOX.Catalog
ADOXCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mindb.mdb;Persist Security Info=False"
Dim b As ADOX.Table
For Each tbl In ADOXCat.Tables
MsgBox tbl.Name & ": " & tbl.Properties("Jet OLEDB:Link Datasource")
Next
När jag sedan gör vad jag tror är samma sak i C# ser det ut såhär:
ADOX.Catalog ADOXCat = new ADOX.Catalog();
ADOXCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\mindb.mdb;Jet OLEDB:Engine Type=5";
foreach (ADOX.Table tbl in ADOXCat.Tables)
{
Console.WriteLine(tbl.Name + ": " + tbl.Properties["Jet OLEDB:Link Datasource"].Value);
}
När jag kör detta får jag ett exception som lyder "Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another." och så markeras "ADOXCat.Tables". Vad jag kan se är detta exakt samma sak som i VB? Är det något med COM interop-prylarna som spökar? Jag har hittat en med samma problem på nätet, men utan lösning där: http://www.google.se/search?q=cache:Kjb5w-l1G8cJ:www.error-bank.com/microsoft.public.dotnet.languages.vb.1/200329_Thread.aspx+ADOX+.NET+LINK&hl=sv&client=firefox-a
Just nu har jag inte samma connectionstring, men jag har givetvis testat med samma som i VB med samma resultat. Jag har även testat att skapa en connection först med samma resultat: System.Data.OleDb.OleDbConnection cnA = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\mindb.mdb;Jet OLEDB:Engine Type=5");
ADOXCat.ActiveConnection = cnA;
Skapar jag däremot databasen via ADOX fungerar det!?
ADOX.Catalog ADOXCat = new ADOX.Catalog();
ADOXCat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\mindb.mdb;Jet OLEDB:Engine Type=5");
foreach (ADOX.Table tbl in ADOXCat.Tables)
{
Console.WriteLine(tbl.Name + ": " + tbl.Properties["Jet OLEDB:Link Datasource"].Value);
}
Försöker jag däremot öppna samma fil med ett nytt ADOX-objekt blir det samma fel...
Någon som har idéer om vart man ska börja leta? Detta känns helt sjukt...
/Johan
Sv: ADOX i .NET
/Johan