Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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 :
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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:
ausblenden 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 user profile iconTh69: SQL-Tags hinzugefügt
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Fr 21.06.13 09:42 
Dann halt :
ausblenden 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 user profile iconTh69: SQL-Tags hinzugefügt

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Fr 21.06.13 10:17 
Datenbank: SQL Server
ausblenden Quelltext
1:
Connection String: Data Source="Servername";Initial Catalog=DatenabnkA;Connect Timeout = 15;Trusted_Connection = yes					


Command-Befehl:
ausblenden 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 user profile iconTh69: Code-Tags hinzugefügt
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: 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