2016-03-29 11 views
1

Ich bin Tring die Insert, Update zum Hinzufügen und Löschen von Befehlen an einen MySqlDataAdapter, die die Daten hinzugefügt, um es mit dem Befehl hat:MySqlDataAdapter Update-Tabelle, die Inner Join verwendet

 //iec211.4521studenti 
     string lv_sObsTable = "`" + mv_sDatabase + "`.`" + mv_sGroup + "observatii`"; 
     string lv_sStudTable = "`" + mv_sDatabase + "`.`" + mv_sGroup + "studenti'"; 
     string lv_sObservatiiCommand = "SELECT o.idObservatie, o.idStudent, s.nume, o.observatie, o.lastUpdate FROM " + lv_sObsTable + " o INNER JOIN " + lv_sStudTable + " s USING (idStudent) ORDER BY s.nume ASC"; 
     mv_dtAdapterObservatii = new MySqlDataAdapter(lv_sObservatiiCommand, mv_sqlConnection); 
     mv_dtAdapterObservatii.Fill(mv_dsTables, lv_sCurrentTable); 

Ich habe für eine serched beantworten, und ich habe zwei mögliche Lösungen für UPDATE gefunden, aber beide geben Sie mir einen Fehler:

 string lv_sObsTB = "`" + mv_sDatabase + "`.`" + mv_sGroup + "observatii`"; 
     string lv_sStudTB = "`" + mv_sDatabase + "`.`" + mv_sGroup + "studenti`"; 

     //VERSION 1 
     string lv_sCommand = "UPDATE o SET [email protected], [email protected] FROM " + lv_sObsTB + " AS o INNER JOIN " + lv_sStudTB + " s ON o.idStudent=s.idStudent "; 
     MySqlCommand lv_sqlCommand = new MySqlCommand(lv_sCommand); 

     lv_sqlCommand.Parameters.Add("@idStudent", MySqlDbType.Int16, 10, "idStudent"); 
     lv_sqlCommand.Parameters.Add("@observatie", MySqlDbType.VarChar, 255, "observatie"); 

     mv_dtAdapterObservatii.UpdateCommand = lv_sqlCommand; 

     //VERSION 2 
     string lv_sCommand = "UPDATE " + lv_sObsTB + " SET " + "[email protected]" + lv_sStudTB + ".idStudent, [email protected] WHERE [email protected] AND " + lv_sObsTB + ".idStudent IN (SELECT " + lv_sStudTB + ".idStudent FROM " + lv_sStudTB + ")"; 
     MySqlCommand lv_sqlCommand = new MySqlCommand(lv_sCommand); 

     lv_sqlCommand.Parameters.Add("@" + lv_sStudTB + ".idStudent", MySqlDbType.Int16, 10, "idStudent"); 
     lv_sqlCommand.Parameters.Add("@observatie", MySqlDbType.VarChar, 255, "observatie"); 
     lv_sqlCommand.Parameters.Add("@idObservatie", MySqlDbType.Int16, 10, "idObservatie"); 

     mv_dtAdapterObservatii.UpdateCommand = lv_sqlCommand; 

die Fehlermeldung für die erste Version lautet: „Sie haben einen Fehler in der SQL-Syntax, kontrollieren das Handbuch das entspricht Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe von 'FROM iec211. 4521observatii ASS o INNERER ANSCHLUSS iec211. 4521studenti s ON o.id 'at line 1 "

Die Fehlermeldung für die zweite Version lautet: Sie haben einen Fehler in Ihrer SQL-Syntax, überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe entspricht '. 4521studenti'.idStudenti, observatie='test' WHERE idObservatie=1 AND iec211 .' bei Zeile 1 "

Ich kann nicht die MySQL-Befehle in Kombination mit MySqlCommand und MySqlDataAdapter verwenden.

Bis jetzt habe ich den folgenden Befehl verwendet, um Daten für meine Tabelle zu erhalten:

 string lv_sObservatiiCommand = "SELECT * FROM `" + mv_sDatabase + "`.`" + mv_sGroup + "observatii` ORDER BY idStudent ASC"; 
     mv_dtAdapterObservatii = new MySqlDataAdapter(lv_sObservatiiCommand, mv_sqlConnection); 
     mv_dtAdapterObservatii.Fill(mv_dsTables, lv_sCurrentTable); 

In Kombination mit MySqlCommandBuilder den Update-Befehl und die Parameter zu erhalten, die es zu setted benötigt:

 lv_sqlCommandBuilder = new MySqlCommandBuilder(mv_dtAdapterObservatii); 
     mv_dtAdapterObservatii.UpdateCommand = lv_sqlCommandBuilder.GetUpdateCommand(); 

Kann mir bitte jemand erklären, wie man die Befehle zum Einfügen, Aktualisieren und Löschen eines MySqlDataAdapter, der einen INNER JOIN zwischen zwei Tabellen enthält, korrekt hinzufügt?

Ich weiß, dass jede Tabelle in einem anderen Datenadapter sein muss, und sie sind. Die Tabelle "4521studenti" befindet sich in "mv_dtAdapterStudenti", die nicht im obigen Code enthalten ist.

Vielen Dank für die Hilfe und ich hoffe, dies wird nicht als eine schlechte Post betrachtet werden. :)

Antwort

0

Okey. Ich denke, ich habe es herausgefunden.

Dies ist der SELECT-Befehl für 4521observatii:

 string lv_sStudent = "`" + mv_sDatabase + "`.`" + mv_sGroup + "studenti`"; 
     string lv_sObservatii = "`" + mv_sDatabase + "`.`" + mv_sGroup + "observatii`"; 
     string lv_sObservatiiCommand = "SELECT o.idObservatie, o.idStudent, s.nume, o.observatie, o.lastUpdate FROM " + lv_sObservatii + " o INNER JOIN " + lv_sStudent + " s USING (idStudent) ORDER BY s.nume ASC"; 
     // Read data from the server for the current table and add it to the DataSet 
     mv_dtAdapterObservatii = new MySqlDataAdapter(lv_sObservatiiCommand, mv_sqlConnection); 
     mv_dtAdapterObservatii.Fill(mv_dsTables, lv_sCurrentTable); 

Und das ist der Code für den Befehl UPDATE, innerhalb einer anderen Methode:

 // `iec211`.`4521observatii` 
     string lv_sObsTB = "`" + mv_sDatabase + "`.`" + mv_sGroup + "observatii`"; 
     // `iec211`.`4521studenti` 
     string lv_sStudTB = "`" + mv_sDatabase + "`.`" + mv_sGroup + "studenti`"; 
     string lv_sSelectStudenti = "(SELECT idStudent FROM " + lv_sStudTB + " WHERE [email protected])"; 

     string lv_sCommand = "UPDATE " + lv_sObsTB + " SET idStudent="+ lv_sSelectStudenti + ", [email protected] WHERE [email protected]"; 
     MySqlCommand lv_sqlCommand = new MySqlCommand(lv_sCommand); 

     lv_sqlCommand.Parameters.Add("@idStudent", MySqlDbType.Int16, 10, "idStudent"); 
     lv_sqlCommand.Parameters.Add("@observatie", MySqlDbType.VarChar, 255, "observatie"); 
     lv_sqlCommand.Parameters.Add("@idObservatie", MySqlDbType.Int16, 10, "idObservatie"); 

     mv_dtAdapterObservatii.UpdateCommand = lv_sqlCommand; 
     mv_dtAdapterObservatii.UpdateCommand.Connection = mv_sqlConnection; 

Die Idee ist, dass, wenn ich INNER JOIN verwenden Ich bringe Daten von zwei verschiedenen Tabellen und stelle sie zusammen. Als ich den UPDATE-Befehl benutzte, wusste das Programm nicht, welche Tabelle er benutzte und gab diese Fehler.

Also dachte ich was, wenn ich die Werte von 4521observatii aktualisieren und für die Spalte, die als FOREIGN KEY I verwendet wird, den Wert von 4521studenti zuweisen.

Ich weiß, es ist wie "Sag mir deinen Namen, damit ich dir deinen Namen sagen kann.", Aber es hat für mich funktioniert.

Ich hoffe, dies wird anderen helfen und Sie haben eine bessere und sauberere Lösung, bitte sagen Sie mir :)