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
[gelöst] MS-SQL führt Update nicht durch
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

[gelöst] MS-SQL führt Update nicht durch

beantworten | zitieren | melden

Hi,

ich arbeite zur Zeit an einer kleinen ASP.Net-Beispielseite und habe das Problem das der MS-SQL-Server mein Update nicht versteht:

UPDATE projekte SET Projekt='Projekt', Beginn='13.02.2008 14:00:00', Ende='13.02.2008 15:00:00' WHERE ID=1;

MS-Access akzeptiert den Befehl so wie er ist. Habe es auch schon ohne ' probiert.
Hat jemand eine Idee?

MfG Zocker
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von User4999 am .
private Nachricht | Beiträge des Benutzers
NiceMen
myCSharp.de - Member



Dabei seit:
Beiträge: 67

beantworten | zitieren | melden

Hallo,

Was ist denn genau die Fehlermeldung?

So aus dem Bauch würde ich auf das Datumsformat tippen.

Aber ohne richtige Fehlermeldung, kann ich Dir nicht helfen.

fG
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

naja das Datumsformat dürfte richtig sein da schon Daten in diesem Format vorhanden sind und ausgelesen werden.
Fehlermeldung ist leider schwierig da der Webspace auf dem ich teste bei 1&1 liegt und die keine Fehlermeldungen nach außen leiten...
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

und wo liegt das problem? wenn es deine applikation ist, dann logg in eine file oder gib eine entsprechende response zurück und wenn nicht, dann geh doch mit sowas wie phpmyadmin oder ähnlichem drauf....
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

ok... hab mir jetzt mal den Fehler über try/catch ausgeben lassen...:

System.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '.2008'. at Sys......

naja... liegts halt doch am Format. Was ist da denn falsch? Ich hab nach der korrekten DateTime-Syntax für MS-SQL gesucht und entweder nur bestätigendes (dd.mm.yyyy hh.mm.ss) oder gar nichts gefunden.
private Nachricht | Beiträge des Benutzers
Dexter323
myCSharp.de - Member



Dabei seit:
Beiträge: 89
Herkunft: Hannover

beantworten | zitieren | melden

hast du fehlermeldung rauskopiert ? denn hinter dem -> '.2008'. at Sys.... ist ein . der da glaub ich nicht hingehört ?!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dexter323 am .
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

ähm ich wollt euch den ganzen Schwanz mit "at objektpfad at objektpfad "bla" ...." ersparen, ist immerhin nen ganz schöner Text. Deswegen "...."
Falls du den Punkt bei '.2008'. meinst der ist dort drin. Das wird mri so ausgegeben wenn ich die Exception zu nem String konvertier und mir in ein Label ausgeben lasse.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von User4999 am .
private Nachricht | Beiträge des Benutzers
Dexter323
myCSharp.de - Member



Dabei seit:
Beiträge: 89
Herkunft: Hannover

beantworten | zitieren | melden

ich habe so das dumpfe gefühl er mag dein datum nicht, bzw das format. versuch doch mal ein anderes ?!
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

schon klar das der das Format nicht mag. Ich frag mich ja auch woran das liegt. Ausprobiert hab ich schon einige nur dann kommt die gleiche Fehlermeldung wieder nur das statt '.2008' irgendwas andres bemängelt wird.
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Was für eine Sprachversion ist denn auf dem SQL Server aktiv? Du versuchst ein deutsches Datumsformat in den SQL Server zu quetschen. Wenn der allerdings nur das englische Format kennt, meckert er natürlich.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

keine Ahnung was für ein Format aktiv ist. Ich habe englische Formate aber schon probiert (yyyy/dd/mm usw.)
private Nachricht | Beiträge des Benutzers
Dexter323
myCSharp.de - Member



Dabei seit:
Beiträge: 89
Herkunft: Hannover

beantworten | zitieren | melden

wäre zwar yyyy/mm/dd , das auch versucht
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

Ja, funktioniert auch nicht
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Hast du denn dieses Update-Statement so mal direkt im Management Studio abgefeuert, oder ist das jetzt ein Update-Statement aus deinem Source heraus? Wenn ja, zeig mal den Source.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

Management Studio?

Das Statement ist das was durch den Code generiert wird.
Wie gesagt die Testseite mit MS-SQL-Server ist bei 1&1 (wo ich dann doch denk das da dann nen deutsches Format in der Datenbank erwartet wird, hab aber wie geschrieben auch andere Formate probiert)
Außerdem hab ich das nochmal für MS-Access programmiert (kann ich ohne weiteres lokal testen...) wo dieses Statement funktioniert.
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Also, wenn ich das Statement oben in eine Testtabelle, die ich mal angelegt habe, ausführe, erhalte ich keinerlei Fehler.
Zitat
Management Studio?
Wird beim SQL Server (Express) mitgeliefert. Kann man sich auch einzelnd runterladen (IMHO). Damit kannst du dich auf SQL Datenbanken klinken. Solltest du dir vielleicht mal einrichten. Du wirst ja Zugangsdaten zu dem SQL Server bekommen haben.
Das bietet dir unter anderem noch den Vorteil, das du halt Scripte schnell mal gegen die Datenbank testen kannst.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

Ich hab jetzt versucht mich mit dem Management Studio auf die Datenbak zu verbinden. Hab aber nur ne Fehlermeldung bekommen laut der wahrscheinlich Remoteverbindungen nicht erlaubt sind.
Naja einen Versuch wars wert, hätte mich aber auch gewundert wenn man einfach so auf so ne Datenbank draufkommen könnte.
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3.511
Herkunft: Hannover

beantworten | zitieren | melden

Wie gesagt, bei mir funktioniert das Update-Statement einwandfrei. Lass dir mal via "SELECT @@LANGUAGE" anzeigen, welche Sprache installiert ist. So langsam gehen mir die Optionen aus

[offtopic]
Hmm, dann ist das von 1&1 nicht unbedingt schlau gelöst. Den Remotezugriff hätten die wenigstens erlauben können.
Ist IMHO noch ein Grund kein 1&1 zu nutzen, aber naja...
[/offtopic]
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.986

beantworten | zitieren | melden

Und wenn er gleich richtigerweise die Paremeter genommen hätte,
wäre diese ganze diskusion nicht nötig gewesen.

Die sind nämlich explizit für soetwas gedacht.

Aber das steht hier ja nur in jedem 4.Posting, kann man ja leicht übersehen.

@Zocker:
Das Sql von Access ist wirklich kein masstsab.
private Nachricht | Beiträge des Benutzers
raiguen
myCSharp.de - Member



Dabei seit:
Beiträge: 158
Herkunft: 31020 Salzhemmendorf

beantworten | zitieren | melden

Zitat
UPDATE projekte SET Projekt='Projekt', Beginn='13.02.2008 14:00:00', Ende='13.02.2008 15:00:00' WHERE ID=1;

MS-Access akzeptiert den Befehl so wie er ist.
MS-Access!=MS-SQL, will sagen: was bei Access funktioniert muss noch lange nicht bei SQL so funktionieren; zwischen den beiden gibt es doch den einen oder anderen syntaktischen Unterschied.Im Allgemeinen (und im Speziellen sowieso) empfehle ich, SQL-Statemants bzw -Commandos immer zu parametrisieren, so dass der Server bzw die Datenbank anhand des Parametertyps die entsprechende Konvertierung durchführen kann. Bei Codeseitigem Erstellen eines SQL-Statements würde das in diesem Beispiel wie folgt aussehen (quick&dirty):

... //--Abfrage vorbereiten
static string strSQL = "UPDATE projekte " +
"SET Projekt=@PROJEKT, " +
"Beginn=@STARTDATUM, " +
"Ende=@ENDDATUM " +
"WHERE ID = @ID";

static SqlCommand cmd = new SqlCommand(strSQL, db_con);

// Parameter für cmd vorbereiten
cmd.Parameters.Add("@PROJEKT", System.Data.SqlDbType.VarChar, 15);
cmd.Parameters.Add("@STARTDATUM", System.Data.SqlDbType.DateTime);
cmd.Parameters.Add("@ENDDATUM", System.Data.SqlDbType.DateTime);
cmd.Parameters.Add("@ID", System.Data.SqlDbType.Int);

...//--Parameter bestücken
cmd.Parameters[0].Value = ...;
cmd.Parameters[1].Value = ...;
cmd.Parameters[2].Value = ...;
cmd.Parameters[3].Value = ...;
//--ausführen...

[EDIT] @FZelle: genau so seh ich das auch, deswegen mein etwas ausführlicherer Beitrag
[/EDIT]
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.773
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

MS SQL Server versteht am Besten das ISO-Datumsformat :

2008-31-12

Der Compact Server und MySQL verstehen das leider nicht, sie wollen es so :

2008-12-31

Aber nimm besser, wie Fzelle geschrieben hat, die Parameter.

Grüße Bernd
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von BerndFfm am .
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
User4999
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

Moin,

das MS Access kein Maßstab ist, ist schon klar... und das jede Datenbank ihren eigenen scheiß macht ist auch klar. Aber das grade bei sowas wie nem Datum eigentlich ein so großer Unterschied existiert hätte ich eben nicht erwartet.

Ich werd das mit den Parametern mal probieren. (Da hätte ich übrigens auch selber draufkommen können, da ich vor nen paar Jahren auch schonmal drüber gestolpert bin... naja was man nicht täglich macht vergisst man leicht ^^)

Edit: Es funktioniert jetzt endlich ^^ Danke an alle die geholfen haben
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von User4999 am .
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3.773
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Zitat
Aber das grade bei sowas wie nem Datum eigentlich ein so großer Unterschied existiert hätte ich eben nicht erwartet.

Bei Datumsformat und Datumsfunktionen bestehen die größten Unterschiede zwischen den Datenbanken.

;-)

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers