Pr3dat0r Geschrieben 8. September 2010 Geschrieben 8. September 2010 Guten Morgen liebe Community, ich bin soeben dabei, eine Verknüpfung auf Access-Ebene via C#-Code einzubinden. Mein Konstrukt sieht folgendermaßen aus: ADOX.CatalogClass cat = new ADOX.CatalogClass(); ADOX.TableClass tbl = new ADOX.TableClass(); ADODB.ConnectionClass cn = new ADODB.ConnectionClass(); cn.Open(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=V:\\db1.mdb", "", "", -1); cat.ActiveConnection = cn; tbl.Name = "tName"; tbl.ParentCatalog = cat; tbl.Properties["Jet OLEDB:Link Datasource"].Value = "V:\\db2.mdb"; tbl.Properties["Jet OLEDB:Remote Table Name"].Value = "tName"; tbl.Properties["Jet OLEDB:Create Link"].Value = true; cat.Tables.Append(tbl); cn.Close(); Die Verknüpfung legt er mir sauber an, allerdings bekomme ich es nicht hin, dass er den Append-Schritt auslässt, wenn die verknüpfte Tabelle schon existiert. Somit läuft er mir bei erneutem Drüberrattern in einen Fehler (das Objekt "tName" existiert bereits). Mein zweites Problem ist dann die Pfadangabe via Variablen, die ich habe. Der zweite Pfad (db2.mdb) scheint zu funktionieren, aber der erste (db1.mdb) will einfach nicht... Ich bitte um Hilfe! Vielen Dank im Voraus! Gruß, Pr3dat0r :. Zitieren
2K1.INC Geschrieben 8. September 2010 Geschrieben 8. September 2010 Hi, mach doch einfah eine IF-Anweisung drüber in der er nur reingeht und append ausführt wenn die Tabelle nicht vorhanden ist. Soviel ich weis kann man die Parameter vom User/Password etc weglassen wenn keine vorhanden/genutzt nicht benötigt werden, dies machst du ja auch beim 2ten da lässt du es auch weg. Versuchs vll gehts ja wenn du die Parameter weglässt weil wenn "" drinsteht sucht er nach "" und findest es ned wär was anderes wenn du null/string.empty übergibst. Zitieren
Pr3dat0r Geschrieben 8. September 2010 Autor Geschrieben 8. September 2010 Hi und danke erst mal für die Antwort! An einer If-Anweisung hab ich auch schon etwas rumexperimentiert. Aber wie frage ich denn ab ob die Tabelle schon existiert? Wenn ich die DataSource auf cn.Open(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=V:\\db1.mdb", -1); anpasse, erscheint folgender Fehler: Fehler 1 Keine Überladung für die Open-Methode nimmt 2 Argumente an. Auch bei cn.Open(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=V:\\db1.mdb"); kommt ein ähnlicher Fehler: Fehler 1 Keine Überladung für die Open-Methode nimmt 1 Argumente an. Zitieren
lbm1305 Geschrieben 8. September 2010 Geschrieben 8. September 2010 Ansonsten hilft auch der (OleDb)ConnectionStringBuilder. PseudoCode: ConnectionStringBuilder conBuilder = new ConnectionStringBuilder() conBuilder.DataSource = "XXXXXX"; string conString = conBuilder.ToString(); Zitieren
Pr3dat0r Geschrieben 8. September 2010 Autor Geschrieben 8. September 2010 Danke für die Antwort! Das hab ich nach etwas Gebastel hinbekommen: System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") sb.Append(dbsFK); cn.Open(sb.ToString(), "", "", -1); Nu fehlt mir noch die Abfrage, ob es die Verknüpfung schon gibt... Help! Zitieren
lbm1305 Geschrieben 8. September 2010 Geschrieben 8. September 2010 Moin, es gibt jeweils eine (OleDb)/(Sql)ConnectionStringBuilder-Klasse und eine StringBuilder-Klasse. Beim ConnectionStringBuilder kommt halt noch der jeweilige Datenprovider davor. Die Klasse baut sich den ConnectionString dann auch korrekt zusammen. Zitieren
Pr3dat0r Geschrieben 8. September 2010 Autor Geschrieben 8. September 2010 Aber meine Lösung ist doch richtig, oder? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.