Hilfe bei C# und MySQL

IxI_wombat_IxI

Grünschnabel
Ich weiß das dieses Thema bestimmt schon oft vorgekommen, jedoch habe ich keinen Artikel gefunden der mir geholfen hätte.

Ich arbeite zZ für die Schule an einem Programm, dass die Verwaltung von einem Carshare Unternehmen ermöglichen soll.
Kunden können über eine Hompage für sich selbst Reservierungen aufnehmen (das ermöglichte mein Partner mit PHP). Ich programmierte eine Windows-Forms Anwendung die den Mitarbeitern im Betrieb zur Verfügung stehen sollte. Beide Oberflächen sollten auf die selbe Datenbank Zugreifen, und hier kommt das Problem. Ich habe bis jetzt mit MSSql Programmiert und Testdatensätze erzeugt zum schauen ob alles geht. mein Partner auf eine Online MySQL Datenbank. Nun sollte mein Projekt auch auf die MySQL DB zugreifen. Der Zugriff sollte ja eig. nicht so schwer sein, eine using MySql.Data Direktive einfügen und die Kommandos wie SqlCommand o. Ä. zu MySqlCommand umändern. Das Projekt ist relativ groß aber eig. kann man die befehle ja ersetzen lassen. Das Problem ist nur das das nicht besonders reibungslos funktioniert, weil in der Designer.cs x-mal auf Element wie SqlParameter o. Ä. zugreift und ich immer noch mehr Fehlermeldungen bekomme wenn ich versuche das alles abzuändern.

Ich würde mich sehr über Hilfe freuen!
 
Hi

Und wobei brauchst du nun Hilfe? :confused:

Prinzipiell würde ich die empfehlen die Objekt für die DB-Kommunikation nicht über den Designer anzulegen sondern per Code an den Stellen, wo du sie brauchst.
Soll heißen:
[pseudocode]
// Connection anlegen
// Command anlegen
// Connection öffnen
// Command auführen (und ggf. Daten verpacken)
// Connection schließen
[/preudocode]

Alle Klassen implementieren IDisposable. Demnach die Nutzung der Objekte immer in using-Statements packen (oder wenigsten nach der Benutzung Dispose() aufrufen)
 
Und wobei brauchst du nun Hilfe? :confused:

Dabei eine Lösung zu finden wie ich das ganze Projekt auf eine andere DB-umstellen kann^^


[pseudocode]
// Connection anlegen
// Command anlegen
// Connection öffnen
// Command auführen (und ggf. Daten verpacken)
// Connection schließen
[/preudocode]

Ich denke so hab ich das:

Codebeispiel:

Connection.init(); <---- Offnen der Connection
SqlCommand cmd = new SqlCommand(); <---- Command Objekt (sollte MySQLCommand werden)
string CommandText = "SELECT USER_ID, USER_TNOTIZ " + <--- Query
"FROM T_USER " +
"WHERE (USER_ID = '" + Connection.AU_ID + "')";

cmd = new SqlCommand(CommandText); <--- Zuweisen des CommandText
cmd.Connection = Connection.Conn; <--- Festlegen der Connection

SqlDataReader rdr = cmd.ExecuteReader(); <--- Reader erzeugen


while (rdr.Read())
{

bisherigeNotiz = rdr["USER_TNOTIZ"].ToString();
}


Ist da was vom Designer erstellt oder nicht ? weil im designer stehen seeehr viele DB-Befehle wie z.B:

"this._adapter.DeleteCommand.Parameters.Add(new global::System.Data.SqlClient.SqlParameter("@Original_GARAGE_ID", global::System.Data.SqlDbType.Int, 0, global::System.Data.ParameterDirection.Input, 0, 0, "GARAGE_ID", global::System.Data.DataRowVersion.Original, false, null, "", "", ""));"
 
Nein, hast du nicht. Hättest du aber auch gemerkt, wenn du deinen Code mal ausprobiert hättest!
Unter http://msdn.microsoft.com/de-de/library/9kcbe65k(v=VS.80).aspx findest du ein Beispiel. Da siehst du auch, wie die Connection und Command-Objekte in using-Statements gesetzt werden! (fehlt bei Command; schau dir mal das Interface IDisposable an!)

Auf http://dev.mysql.com/doc/refman/5.1/de/connector-net.html findest du auch Beispiele für MySQL.

Übrigens indizierst du 2 mal dein Command-Objekt! Einmal ohne alles und einmal mit CommandString und Connection! Eins reicht! ;)
 
Nein, hast du nicht. Hättest du aber auch gemerkt, wenn du deinen Code mal ausprobiert hättest!

Versteh ich nicht ganz, der Code den ich gepostet habe funktioniert einwandfrei mit der bisherigen DB

Also ich lerne erst ca 1Jahr lang Programmieren, darum verwirrst du mich ein bischen. Oder ich habe meine Frage falsch gestellt, ich denke nicht das es an der verwendung eines DataRaders oder so scheitert, sondern an der tatsache das der Designer so viel Code erstellt, der mir etliche Fehler erzeugt wenn ich meine Connection auf eine MySQL DB umstelle. Den von mir Programmierten Code kann ich ja leicht ändern (Suche&Ersetzen) nur muss ich mich fragen wie ich den Code aus dem Designer ändern kann ?

Gibt es irgend eine Lösung für das Problem ?
 
Hi

Den vom Designer generierten Code solltest du nicht von Hand ändern (steht übrigens auch im Kommentar der InitalizeComponent).
Demnach hast du nur die Wahl entweder per Designer die OBjekte neuzuerstellen oder deinen Code entsprechenden von Hand schreiben.
Letzteres würde ich die übrigens empfehlen, da so zum einen der Lerneffekt erheblich höher ist und du zum anderen weißt was passiert und die Kontrolle hast.
Das Prinzip ist immer das gleiche:
C#:
using (SqlConnection connection = new SqlConnection(connectionString))
{
        connection.Open();

        using(SqlCommand command = new SqlCommand(queryString, connection))
        {
                SqlDataReader reader = command.ExecuteReader();
                // do something with reader
                // oder command.ExecuteNonQuery() bzw. command.ExecuteScalar()
        }
}
 
Ja aber was macht der designer da überhaupt, ich habe ja den Code selbst geschriben, nur nicht in eine Using wie du aber sonst genau das gleiche. Meinst du ich muss ein neues Projekt machen und alles nochmal schreiben nur weil ich vor den Codes die ich geschriben habe "My" haben will ? das wäre schecklich o_O
 
Wenn du den Code für die DB Abfragen zur Gänze selbst geschrieben hast, zeig doch einfach mal die Stellen wo ein Fehler gemeldet wird, beziehungsweise einfach mal die genauen Fehlermeldungen. Ohne diese Infos ists ja eher nur ein Raten.. :)

lg,..
 
Das Problem ist gelöst. Ich möchte euch für eueren Aufwand danken. Das Problem war das beim anbinden einer MSSQL DB ein Dataset erzeugt wird, will man auf eine andere Datenbank umsteigen muss man ein Projekt verwenden das dieses Dataset nicht nutzt -> neue Windows Forms und die alten Formulare+Code reinkopiert.

Mein neues Problem ist jedoch jetzt bei der Verbindung mit der DB, den Connectionsting habe ich schon gebastelt:

string connstring = "Server=www2.****.cc;uid=****;pwd=****;database=db_carshare;";

Doch damit bekomme ich immer die Meldung:

"Unable to connect to any of the specified MySQL hosts."

Kennt sich da zufällig noch wer aus ?
 
Firewalls geprüft?
Ist der Zugriff auf die DB von außen überhaupt erlaubt? Was ich mir kaum vorstellen kann und auch für den Admin des Hosts nicht hoffe!
 
Zurück