Laden...

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

Erstellt von User4999 vor 16 Jahren Letzter Beitrag vor 16 Jahren 7.802 Views
U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren
[gelöst] MS-SQL führt Update nicht durch

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

N
67 Beiträge seit 2006
vor 16 Jahren

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

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

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...

Gelöschter Account
vor 16 Jahren

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....

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

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.

D
89 Beiträge seit 2008
vor 16 Jahren

hast du fehlermeldung rauskopiert ? denn hinter dem -> '.2008'. at Sys.... ist ein . der da glaub ich nicht hingehört ?!

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

ä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.

D
89 Beiträge seit 2008
vor 16 Jahren

ich habe so das dumpfe gefühl er mag dein datum nicht, bzw das format. versuch doch mal ein anderes ?!

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

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.

3.511 Beiträge seit 2005
vor 16 Jahren

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)

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

keine Ahnung was für ein Format aktiv ist. Ich habe englische Formate aber schon probiert (yyyy/dd/mm usw.)

D
89 Beiträge seit 2008
vor 16 Jahren

wäre zwar yyyy/mm/dd , das auch versucht

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

Ja, funktioniert auch nicht

3.511 Beiträge seit 2005
vor 16 Jahren

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)

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

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.

3.511 Beiträge seit 2005
vor 16 Jahren

Also, wenn ich das Statement oben in eine Testtabelle, die ich mal angelegt habe, ausführe, erhalte ich keinerlei Fehler.

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)

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

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.

3.511 Beiträge seit 2005
vor 16 Jahren

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 🤔

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...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

F
10.010 Beiträge seit 2004
vor 16 Jahren

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.

R
158 Beiträge seit 2007
vor 16 Jahren

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]

3.825 Beiträge seit 2006
vor 16 Jahren

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

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

U
User4999 Themenstarter:in
134 Beiträge seit 2006
vor 16 Jahren

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 🙂

3.825 Beiträge seit 2006
vor 16 Jahren

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