2009-07-23 2 views
1

Ich muss an dieser schlecht entworfenen Datenbank arbeiten, wo eine neue Gruppe von Daten durch Hinzufügen einer neuen db zum Server eingerichtet wird. Also muss ich Daten von mehreren dbs holen, ich frage mich, gibt es eine Möglichkeit, alle Gruppendaten über eine Verbindung zu bekommen? Ich benutze C#.ist es möglich, Daten von mehreren dbs über eine Verbindungsanfrage zu holen

+0

Können Sie die DB angeben? Wie oft wird eine neue Gruppe hinzugefügt? –

+0

Welchen Datenbankserver benutzen Sie? Es ist möglich, eine Verbindung zwischen Datenbankservern aus der Datenbank in SQL Server und Oracle (und wahrscheinlich den meisten Datenbank-Engines) herzustellen - aber die Einrichtung wird für jeden unterschiedlich sein. –

+0

Mithilfe von SQL Server wird die neue Gruppe durch Aufrufen der gespeicherten Prozedur hinzugefügt und ein neuer Datensatz in eine Tabelle eingefügt, um den neuen Datenbanknamen zu verfolgen. –

Antwort

1

(beiseite: es möglich ist, um das Design zu beeinflussen Das klingt teilweise wie das, was Datenbank-Schema-Name für ... entworfen sind)

es manchmal möglich ist (zum Beispiel in SQL Server von database.schema.object Notation, oder sogar server.database.schema.object), aber ich empfehle es nicht, da der gleiche Ansatz nicht für alle Anwendungsfälle passt und viele Best-Practice-Richtlinien verletzt. Ich würde dringend empfehlen, einfach die Verbindungszeichenfolge pro Datenbank zu generieren, vielleicht unter Verwendung von DbConnectionStringBuilder oder spezifischerer Varianten wie SqlConnectionStringBuilder.

Sie könnten das Pooling auf den dynamischen Verbindungen deaktivieren, wenn Sie sich Sorgen machen, zu viele offene (gepoolte) Verbindungen zu haben (aber Sie müssten dann die Verbindungsverwaltung selbst verwalten; persönlich wäre ich versucht, das Pooling zu erlauben, bis ich kann beweisen, dass es ein Problem gibt).

+0

Wenn ich Verbindungszeichenfolge für jede Datenbank erzeuge, bedeutet das, dass ich so viele Verbindungen wie die Anzahl der dbs erstellen muss? klingt für mich irgendwie ineffizient, es könnte mehr als Hunderte von Gruppen geben. –

+0

Wow; Hunderte von dbs? Ja ... da ist eine Ineffizienz, aber ich denke das ist im * Design *. Sie könnten ** den Ansatz von database.schema.name ** versuchen, aber auf eigenes Risiko ... –

+0

danke für das Aussortieren. –

0

Wenn sich alle Datenbanken auf demselben Server befinden, können Sie sie einfach mit dem vollständigen Namen einer Verbindung zu der Hauptdatenbank abfragen. Möglicherweise müssen Sie den gesamten Code dynamisch mit diesem Design erstellen, da Sie nicht im Voraus wissen, mit welcher Datenbank Sie eine Verbindung herstellen müssen.

select * from database1.dbo.mytable m 
join database2.dbo.mytable m2 on m.id = m2.id 
Verwandte Themen