Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Insert into aus zwei Datenbanken
Vegeto - Do 20.06.13 13:12
Titel: Insert into aus zwei Datenbanken
Hallo,
ich wollte mal fragen ob es eine Möglichkeit gibt ein Inster-Befehl in C# zu benutzen, wo man zwei Datenbanken anspricht?
Bsp.:
Lösung :
Quelltext
1:
| Insert Into bank Select spalte_a, spalte_b, spalte_c, spalte_d, spalte_e From tabelle_A, tabelle_B Where tabelle_A.spalte874 = tabelle_B.spalte1456 ; |
Das wäre möglich wenn die ganzen Daten aus einer Datenbank heraus kommen. Doch wie sieht der Code in C# dann aus wenn man z.B. Tabelle: bank auf einer Datenbank A hat und die tabelle_A und tabelle_B in Datenbank B ???
Ich hoffe ihr versteht mein anliegen.
Lg
Vegeto - Do 20.06.13 14:48
Hat sich erledigt :)
Sollte jemand das selbe problem haben muss er mit Reader und Comand.Parametern arbeiten :)
Lg
ps.: Fragen beantworte ich gerne ^^
Ralf Jansen - Do 20.06.13 14:56
Wenn die Datenbanken auf dem gleichen Server liegen kannst du einfach den Datenbanknamen hinzufügen. Also nicht einfach nur den Tabellennamen sondern Datenbankname.Tabellenname bzw. DatenbankName.Schema.Tabellenname. Dann reden die Datenbanken auch direkt miteinander und die Daten werden nicht erst mühsam durch deinen Prozess geroutet.
Vegeto - Fr 21.06.13 08:53
Dankeeee :)
Das hört sich besser an :)
Doch da stellt sich nun meine frage wie kann ich das in C# umsetzen?
ist es so möglich:
C#-Quelltext
1: 2: 3: 4: 5:
| sqlconnection conn = new sqlconnection(Datenbank A) SqlCommand cmd = new SqlCommand(); cmd.ConnectionString = conn; cmd.CommandText = "Insert Into Tabelle A Select DatenbankB.TabelleA.spalte_a, DatenbankB.TabelleA.spalte_b, DatenbankB.TabelleA.spalte_c, DatenbankB.TabelleB.spalte_d, DatenbankB.TabelleB.spalte_e From DatenbankB.TabelleA, DatenbankB.TabelleB Where DatenbankB.TabelleA.spalte874 = DatenbankB.TabelleB.spalte1456" ; cmd.ExecuteNonQuery(); |
Ich glaub so geht es :)
Lg
EDIT:
So Funktioniert das nicht !
Muss doch mit dem Prozes arbeiten...
Dennoch danke^^^^
baumina - Fr 21.06.13 09:21
1. Hat der SQL-Befehl nichts mit der Programmiersprache zu tun.
2. Müsste der SQL-Befehl wie folgt schon klappen:
SQL-Anweisung
1: 2: 3: 4:
| Select TabA.spalte_a, TabA.spalte_b, TabA.spalte_c, TabB.spalte_d, TabB.spalte_e From DatenbankA.TabelleA TabA, DatenbankB.TabelleB TabB Where TabA.spalte874 = TabB.spalte1456; |
Moderiert von
Th69: SQL-Tags hinzugefügt
Vegeto - Fr 21.06.13 09:34
Dennoch Funktiniert es nicht!
Und dein Sql-Befehl erfüllt nicht meinen Zweck.
Ich habe zwei Datenbanken A und B
In A soll eine Tabelle befüllt werden mit den Werten aus der Datenbank B , aus zwei Tabellen.
Ich hoffe jetzt versteht ihr mein Problem.
Da bin ich der meinung das ist das mit zwei Connection ( Connection auf B aufbauen Datensätze rausfilter, Connection auf A aufbauen und Datensätze hinzufügen) machen muss!
Lg
baumina - Fr 21.06.13 09:42
Dann halt :
SQL-Anweisung
1: 2: 3: 4:
| Insert Into DatenbankA.TabelleA Select DatenbankB.TabelleA.spalte_a, DatenbankB.TabelleA.spalte_b, DatenbankB.TabelleA.spalte_c, DatenbankB.TabelleB.spalte_d, DatenbankB.TabelleB.spalte_e From DatenbankB.TabelleA, DatenbankB.TabelleB Where DatenbankB.TabelleA.spalte874 = DatenbankB.TabelleB.spalte1456; |
Bei meinem mysql funktioniert das mit dem select.
Moderiert von
Th69: SQL-Tags hinzugefügt
Vegeto - Fr 21.06.13 09:55
Hallo :)
Also ich habe es jetzt genau wie du gemacht.
In meinem Connection String habe ich unter Initial Catalog Datenbank A stehen.
Trotzdem kommt der Fehler:
Ungültiger Objektname DatenbankB.TabelleA'.
Mach ich was falsch?
Lg
baumina - Fr 21.06.13 10:04
Was für einen Datenbank-Server benutzt du denn und wie heißen die Datenbanken darauf denn genau?
Vegeto - Fr 21.06.13 10:17
Datenbank: SQL Server
Quelltext
1:
| Connection String: Data Source="Servername";Initial Catalog=DatenabnkA;Connect Timeout = 15;Trusted_Connection = yes |
Command-Befehl:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| cmd.CommandText = "Insert Into DatenbankA.Tabelle A "; cmd.CommandText += "Select TabelleA.spalte_a, TabelleA.spalte_b, TabelleA.spalte_c, "; cmd.CommandText += "TabelleB.spalte_d, TabelleB.spalte_e "; cmd.CommandText += "From DatenbankB.TabelleA, DatenbankB.TabelleB "; cmd.CommandText += "Where TabelleA.spalte874 = TabelleB.spalte1456"; cmd.ExecuteNonQuery(); |
Haben es wegen der Übersicht so hier her geschrieben.
Doch der Fehler ist halt:
Ungültiger Objektname DatenbankB.TabelleA'.
Lg
Moderiert von
Th69: Code-Tags hinzugefügt
baumina - Fr 21.06.13 10:49
Irgendwie ist das sehr mühsam aussagekräftige Infos von dir zu bekommen.
1. Ich geh mal davon aus dass Du MSSQL meinst.
2. Ist bei allen Befehlen ist die richtige Schreibweise extrem wichtig, deswegen fragte ich wie die Datenbanken "genau" auf dem SQL-Server heißen, denn manchmal muss man wegen Sonderzeichen um den Datenbanknamen Anführungszeichen drumrum bauen. Auch Leerzeichen können eigentlich nicht im DB-Namen sein, denn Leerzeichen im SQL-Befehl entspricht einem "AS".
Machs dir mal leichter
1. vergib im FROM einen Alias für jede Tabelle (FROM DatenbankA.TabelleA AS TabA) und verwende dann überall (im select und im where) nur "TabA" und "TabB".
2. führe mal nur den select-Befehl aus (ohne insert into) und das möglichst auf dem MSSQL-Server direkt (da gibt's sicherlich ein Tool dafür) und nicht innerhalb deines Programms.
Und ich bin mir ziemlich sicher dass es gehen müsste.
Vegeto - Fr 21.06.13 11:46
Dankeschön hat geklappt :)
du hattest recht habe jz einfach eckicke klammern benutzt :), bei mir hat das dbo gefehlt xD
Dankeschön :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!