Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MySQL statt MS SQL
Nightline
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

MySQL statt MS SQL

beantworten | zitieren | melden

Hallo,

ich möchte gerne eine bestehende Webapplikation (geschrieben in C#), die derzeit in Verbindung mit einem MS SQL Server läuft, mit MySQL einsetzen.

Inwieweit muss ich hier Anpassungen vornehmen, auf was muss ich aufpassen?
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4802
Herkunft: Leipzig

beantworten | zitieren | melden

Mit was hast Du denn den DB Zugriff entwicklelt, mit den System.Data.SqlClient Klassen? Wenn ja dann musst Du diese Klassen austauschen ( Forum Suche nach MySqlConnector ). Wenn Du SQL Queries im Source baust, dann müssen diese natürlich MySql konform sein, also ohne T-SQL.
private Nachricht | Beiträge des Benutzers
Franknstein
myCSharp.de - Member



Dabei seit:
Beiträge: 531

beantworten | zitieren | melden

Je nach dem welche Funktionen beim MS Sql benutzet wurden, wirst du viel Vergnügen haben...

Je nach dem, wie die Daten aus der Datenbank kommen, genügt es, den Klassennamen zu ändern. Wenn du Pech hast, musst du aber einiges neu machen. Es kommt darauf an, welche Funktionen vom SqlServer verwendet wurden und ob vorher schon jemand dran gedacht hat, das Programm evtl später auf eine neue Datenbank zu portieren.
Besuchen sie das VisualC++ - Forum
private Nachricht | Beiträge des Benutzers
Nightline
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

beantworten | zitieren | melden

Ja Noodles, ich benutze die SqlClient-Klassen!

Hmm, also ich zeige euch mal die Methode mit dem längsten SELECT-Command, da seht ihr sicher gleich ob die verwendeten Befehle in MySQL Probleme bereiten:


static public DataSet GetFilme(ref string error)
		{
			try
				{
					conn.Open();
					SqlCommand com = new SqlCommand("SELECT TOP 100 PERCENT SUM(t_cc_rating.rating) AS Summe, COUNT(*)-1 AS Anzahl, ROUND(SUM(dbo.t_cc_rating.rating) / COUNT(*), 0) AS Stern, t_cc_filme.filmID, t_cc_filme.titel, t_cc_filme.bild, t_cc_filme.beschreibung, t_cc_filme.link, t_cc_filme.filmklein, t_cc_filme.filmgross FROM t_cc_rating INNER JOIN t_cc_filme ON t_cc_filme.filmID = t_cc_rating.filmID GROUP BY t_cc_filme.filmID, t_cc_filme.titel, t_cc_filme.bild, t_cc_filme.beschreibung, t_cc_filme.link, t_cc_filme.filmklein, t_cc_filme.filmgross",conn);
					SqlDataAdapter adapter = new SqlDataAdapter(com);
					DataSet ds = new DataSet();
					adapter.Fill(ds, "Filme");
				
					return ds;
				}
				catch(SqlException ex)
				{
					error = ex.Message;
					return null;
				}
				finally
				{
					conn.Close();
				}
		}

Desweiteren wichtig zu wissen: Wie sieht es mit Parametern und dem Befehl @@IDENTITY aus:


static public int SetEntry(string titel, string bildpfad, string beschreibung, string link, 
			string filmklein, string filmgross, ref string error)
		{
			try 
			{
				conn.Open();

				SqlCommand com = new SqlCommand("INSERT INTO t_cc_filme(titel, bild, beschreibung) " +
					"VALUES (@titel, @bildpfad, @beschreibung)",conn);
				com.Parameters.Add("@titel",SqlDbType.NVarChar).Value = titel;
				com.Parameters.Add("@bildpfad",SqlDbType.NVarChar).Value = bildpfad;
				com.Parameters.Add("@beschreibung",SqlDbType.NVarChar).Value = beschreibung;
				com.ExecuteNonQuery();
				com.CommandText = "SELECT @@IDENTITY";
				int last_id = Convert.ToInt32(com.ExecuteScalar());

				SqlCommand com1 = new SqlCommand("INSERT INTO t_cc_rating(rating, ip, filmID) " +
					"VALUES (0, @ip, @filmID)",conn);
				com1.Parameters.Add("@ip",SqlDbType.NVarChar).Value = "0.0.0.0";
				com1.Parameters.Add("@filmID",SqlDbType.Int).Value = last_id;
				com1.ExecuteNonQuery();

				return 0;
			}
			catch(SqlException ex)
			{
				error = ex.Message;
				return -1;
			}
			finally
			{
				conn.Close();
			}
		}

Ok, hoffe ihr könnt mir weitere Hoffnung machen! Leider war bei Projektbeginn nicht damit zu rechnen, dass eine andere Datenbank genommen werden könnte...
private Nachricht | Beiträge des Benutzers
sheitman
myCSharp.de - Member



Dabei seit:
Beiträge: 1050

beantworten | zitieren | melden

das beste wäre, du schaust dir mal die dokumentation vom mysql server und mssql server bezüglich abweichung vom standard sql an, dann wirst du sehr schnell rausfinden was du ändern mußt

mysql hat z.b. kein "top", dafür aber sowas wie "limit"
je nachdem was für eine mysql version bzw. tabellenformat benutzt hast du transaktionen, subqueries etc. pp.

da hilft nur dokus zwecks features vergleichen, oder aber im internet mal vergleichsseiten zu suchen
private Nachricht | Beiträge des Benutzers
UschkinRedSunshine
myCSharp.de - Member

Avatar #avatar-1829.png


Dabei seit:
Beiträge: 68

beantworten | zitieren | melden

@@identify wird z.b. auch nicht unterstuetzt -> sieht nicht gut aus
private Nachricht | Beiträge des Benutzers
Franknstein
myCSharp.de - Member



Dabei seit:
Beiträge: 531

beantworten | zitieren | melden

Bei Mysql geht das doch genauso. Da heißt es halt nicht @Identity sondern Last_Insert_Id() (vlg http://dev.mysql.com/doc/refman/4.0/de/miscellaneous-functions.html)

Übrigens kann man sich einen Command in deinem Quelltext evtl. sogar sparen, da für jede Verbindung das Ergebnis des letzten Einfügevorgangs in der Variablen @Identity oder der Funktion Last_Insert_Id() gespeichert wird. Daher funktioniert das Auswählen dieser Variablen oder Funktion auch ohne den Namen einer Tabelle anzugeben. Jedenfalls kann man diese Variablen auch noch im nächsten Kommando weiterverwenden....

Bearbeitet: Ich habe ca. 57 Rechtschreib- Grammatikschreibfehler entfernt.....
Besuchen sie das VisualC++ - Forum
private Nachricht | Beiträge des Benutzers
Nightline
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Themenstarter:

beantworten | zitieren | melden

Ok... so weit, so schlecht.

Danke für eure Hinweise und Tipps, werde das nochmal in Ruhe durchgehen müssen.
private Nachricht | Beiträge des Benutzers