Autor |
Beitrag |
Vegeto
Beiträge: 262
|
Verfasst: Do 20.06.13 13:12
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
Beiträge: 262
|
Verfasst: 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
Beiträge: 4701
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: Vegeto
|
|
Vegeto
Beiträge: 262
|
Verfasst: 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
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: 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
Beiträge: 262
|
Verfasst: 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
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: 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
Für diesen Beitrag haben gedankt: Vegeto
|
|
Vegeto
Beiträge: 262
|
Verfasst: 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
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: 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
Beiträge: 262
|
Verfasst: 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
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: Vegeto
|
|
Vegeto
Beiträge: 262
|
Verfasst: 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
|
|