SQL CommandText

Meronax

Mitglied
Hallo,

Ich habe gerade angefangen mich mit SQL zu beschäftigen darum die vlt. etwas blöde Frage.

Ich mache einen Menüplan für unser Intranet, in dem sich die Leute ihre Menüs vorbestellen sollen, damit der Koch die Menge abschätzen kann.

Dazu trage ich die Bestelldaten in eine Datenbank ein, damit schon im vorhinein bestellt werden kann.

Dazu meine beiden Befehle:

Code:
Update Bestellungen set M1 = M1+1 where Datum ='30.10.2009'

Sollte dieser Befehl nicht funktionieren, weil für dieses Datum noch kein Datensatz angelegt ist soll jender Befehl ausgeführt werden:

Code:
 Insert into Bestellungen (Datum, M1, M2, M3) values('30.10.2009', 0, 0, 0)

Im Prinzip funktioniert das auch, aber wenn ich das Datum in der txtDatum.txt ändere wird der erste Befehl zwar fehlerlos ausgeführt, aber ohne Einfluss auf die Datenbank. Kann mir vlt jemand sagen wie ich am besten abfrage ob ein Datensatz mit dem Primärschlüssel (Datum) bereits existiert, falls ja diesen Updaten, falls nein einen erstellen?

Danke

lg
Phil
 
Hallo Phil

Du könntest zB. mit einer SELECT COUNT-Abfrage vorher rausfinden, ob es schon einen Eintrag hat:

Code:
SELECT COUNT(*)  FROM Bestellungen 
WHERE Datum ='30.10.2009';

Das liefert dir die Anzahl Zeilen zurück mit Datum 30.10.09.
Falls das 0 ist -> INSERT
sonst -> Update

Grüsse, Tecla
 
Danke für deine Antwort das hat mir schon geholfen, aber könntest du mir das ein bisschen genuer beschreiben ;)?

Ich bekomm das irgendwie nicht hin, dass ich die Ausgabe in eine Variable speichere damit ich mit dem gespeicherten Wert die "if" abgrage machen kann.
 
Mit was für einer Programmiersprache arbitest du denn, mit C# oder vb.net?

Hier ein Beispiel in C#, oConnection ist das SqlConnection-Objekt mi der Verbindung zu deiner Datenbank:

Code:
string sCommand = "SELECT COUNT(*)  FROM Bestellungen WHERE Datum ='30.10.2009'";
SqlCommand cmd = new SqlCommand(sCommand , oConnection);
oConnection.Open();
cmd.ExecuteNonQuery();
Object returnValue = cmd.ExecuteScalar();
oConnection.Close();
if (Convert.ToInt32(returnValue) > 0)
{
         UPDATE
}
else
{
          INSERT
}
 
Das ExecuteNonQuery kannst du in dem Fall weglassen.
Sonst wird die Abfrage zweimal ausgeführt.
 
Danke, das hatte ich bereits raus genommen ;)

jetzt habe ich eine weitere Frage, ist aber ein bisschen offtopic.

Anstelle einer Microsoft sql Compact Datenbank, möchte ich nun eine Mysql Datenbank verwenden. Auf diese verbinde ich mich mit ODBC treiber also System DSN.
Diese Datenbank habe ich bereits auf einem Anderen gerät laufen. Die Compact Datenbank macht mir Probleme, weil ich net 3.5 nicht installieren kann. Dadurch bekomm ich immer die Meldung "Der Provider xxx ist nicht registriert".
Wenn ich auf 3.5 update, zerstöre ich mir eine andere App, für die der Server eigentlich da ist ;).

Die SystemDSN ist richtig eingerichtet und funktioniert auch.

Aber ich bekomm den Connectionstring nicht auf die Reihe hat da vlt jemand nen Tipp für mich?

danke
Phil
 
Für MySql?

Code:
string sConnectionString = "server=myServer; uid=myUser; pwd=myPW; database=myDB;";

oder falls der Port nicht 3306 ist:

Code:
string sConnectionString = "server=myServer; Port=3307; uid=myUser; pwd=myPW; database=myDB;";

MySqlConnection oConnection = new MySqlConnection(sConnectionString);

Grüsse, Tecla
 
Zuletzt bearbeitet:
Perfekt!
Danke, jetzt funktioniert alles wie es soll. Jetzt bau ich nur noch nen kleinen Client für den Koch, damit der die Speisen ändern und die Bestellungen sehen kann.


Danke für die Hilfe :)
 
Zurück