vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
SQL - Where im Update Command mit Variabler 
Autor: Schudi
Datum: 16.05.17 15:34

Ich stehe gerade mächtig auf dem schlauch....

Ich habe eine ganz einfache SQLCE Datenbank ..

Kreditoren
Id (PK, Int, not null)
Name (nvarchar(100), not null)
Zuname (nvarchar(100), not null)

Enthalten ist 1 Datensatz mit Id=3 Name=Max ZuName=Mustermann

Jetzt versuche ich per Update die Daten zu ändern.

 
Dim myUpdateCommand As New SqlCeCommand("Update Kreditoren Set Name = 'Klaus'," & _
  "ZuName = 'Clausen' WHERE Id = '3'", myConnection)
Mit fixen Werten klappt das wunderbar. Aber das ist ja ziemlich paxisfremd.

 
Dim myUpdCommand As New SqlCeCommand("Update Kreditoren Set Name =" & _
  "tbxName.Text, ZuName = tbxZuName.Text WHERE Id = tbxId.Text", myConnection)
Klappt allerdings nicht. Meldung:'Der Spaltenname ist ungültig.[Node Name (if any)=tbxId, Column Name = Text)


Lege ich den Wert nicht als Text, sondern als Integer an, klappt es ebenfalls nicht...

 
Dim myId As Integer = 3
Dim myUpdCommand As New SqlCeCommand("Update Kreditoren Set Name =" & _
  "tbxName.Text, ZuName = tbxZuName.Text WHERE Id = myId", myConnection)
Meldung:'Der Spaltenname ist ungültig.[Node Name (if any), Column Name = myId)


Ist vermutlich eine selten dämliche Frage, aber was mache ich falsch? Das muss doch auch mit variablen gehen...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Manfred X
Datum: 16.05.17 20:35

Hallo!

Du verwendest ADO.Net!
Schau Dir mal die Klasse "SqlCeParameter" an.
https://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceparameter(v=vs.100).aspx
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Einhorn
Datum: 06.12.17 10:35

Dim myId As Integer = 3
Dim myUpdCommand As New SqlCeCommand("Update Kreditoren Set Name =" & _
"tbxName.Text, ZuName = tbxZuName.Text WHERE Id = myId", myConnection)

! Die variable myId muss getrennt in dem Sql-Befehl gesetzt werden:

Dim myUpdCommand As New SqlCeCommand("Update Kreditoren Set Name =" & _
"tbxName.Text, ZuName = tbxZuName.Text WHERE Id =" & myId & "", myConnection)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Schudi
Datum: 17.05.17 10:57

Danke für den Schupser. Das war genau der Anstoß den ich brauchte.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Manfred X
Datum: 06.12.17 14:44

Hallo Einhorn!

Wenn schon, dann aber richtig!
tbxname.text und tbxZuname.text dürfen nicht zwischen Hochkommas stehen,
weil es Controls-Bezeichner sind, die Abfragefilter erst per Eigenschaft
liefern.
Vor und hinter diesen Bezeichnern sollten jeweils Tütelchen stehen "'".

Aber dieses direkte Zusammenstellen ist nicht empfehlenswert (SQL-
Injection-Risijo, Fehleranfälligkeit, Wartungs-Unfreundlichkeit)
statt dessen sollten SQLCeParameter genutzt werden (s.o.).
Potentiell mißverstehbare Spaltenbezeichner wie "Name" wären zwischen
eckige Klammmern zu setzen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Franki
Datum: 09.12.17 03:02

Hallo Manfred X,
Zitat:

Potentiell mißverstehbare Spaltenbezeichner wie "Name" wären zwischen eckige Klammmern zu setzen.


Die Klammern sind bei solchen Bezeichnungen zwar wichtig und richtig, aber unabhängig davon sollte eine Bezeichnung gewählt werden die wirklich Auskunft gibt. Also z.B. KreditorenName, DebitorenName, oder je nachdem KundenVorname, Kundennachname usw. usw.

Das erhöht die Übersicht wenn man sich später mal seinen eigenen Code anschaut, vermeidet Konflikte bei Datenbanken, evtl. reservierten Schlüsselwörtern in der Programmier- oder Scriptsprache usw. usw.

Also nicht zu faul beim tippen sein, IntelliSense erleichtert die Arbeit und man ist auf der sicheren Seite.

Mit Tricks wie Klammern funktioniert das zwar meist technisch gesehen, aber als optimal empfinde ich das nicht.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Schudi
Datum: 09.12.17 08:15

Erst einmal vielen Dank an alle, die diesen alten Beitrag wieder nach vorne geholt haben und sich mit Rat und Tat beteiligen.

Das mit den eindeutigen Bezeichnern sehe ich genau wie Franki. Das erleichtert die Programmpflege später enorm.

Vielleicht würde es allen - auch künftigen Fragestellern helfen, wenn es ein Beispiel gäbe, wie es denn nun sein sollte...

Nehmen wir an, dass wir Debitorendaten in ganz einfacher Form, nur bestehend aus Name und Anschrift speichern wollen. Die Eingabe erfolgt nicht in eine Tabelle sondern Datensatz für Datensatz in einzelnen Feldern. Oder anders ausgedrückt, es gibt eine Eingabemaske mit den Feldern: DbNummer (was auch der Key ist), DbName, DbBranche, DbStr, DbPlz, DbOrt.

Es soll bewusst nicht die ganze Tabelle aller Kunden zunächst in ein Dataset geladen und dann verarbeitet werden, sondern Satzweise verarbeitet werden.

Wie macht man das nun am elegantesten und unter Verzicht auf Klammern? Mit Sicherheit ist das eine Frage vor der viele stehen, die beginnen sich mit der Thematik zu beschäftigen.

Ein kurzer Beispielcode wäre vermutlich sehr hilfreich.

Ich danke schon mal allen, die sich beteiligen mögen, im Voraus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Manfred X
Datum: 09.12.17 09:18

Hallo!

Auf Standard-DB-Anwendungen mag das zutreffen.
Allerdings: Beim Import zahlreicher Bibliotheken/Symbole kann es zu
Uneindeutigkeiten kommen.

Sobald es keine feste Beziehung zwischen DB und Auswertungsprogramm bzw.
Analyse-Funktionalität gibt, stellt sich die Sache anders dar.

In solchen Fällen muß zunächst die Struktur der zu untersuchenden DB abgefragt
werden. Der Nutzer wählt im Dialog aus, welche Daten in welcher Weise zur weiteren
Aufbereitung und Auswertung heranzuziehen sind: Tabellen, Spalten, Typen-Behandlung,
Spalten-Verknüpfungen, Daten-Transformationen, Werte-Filter usw.
(Die Vorschaltung eines Daten-Exports aus der DB verbietet sich - wegen
Datensicherheit und Datenschutz. Erforderlich sind dynamisch konstruierte Abfragen.)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Schudi
Datum: 09.12.17 09:33

Hallo Manfred,

und vielen Dank für Deine Antwort.

Machen wir es bewusst einfach:

- Der User wählt nicht aus, welche Daten er bearbeiten will. Die Struktur ist durch die Form vorgegeben und auf die im vorausgehenden Post erwähnten Felder beschränkt.

- Wir reden von Standard DB-Abfragen. Der User wählt entweder einen Kunden über seine DbNummer aus, dann soll dieser angezeigt und verändert wieder gespeichert werden, oder er legt einen neuen Kunden an (der Einfachheit halber immer wenn unter der DbNummer noch kein Satz existiert).

Der Thread soll sich ja bewusst am einfachsten Standard orientieren. Ausbauen und komplizierter gestalten kann man die Sache ja später immer noch.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Manfred X
Datum: 09.12.17 09:42

Hallo!

Feste Regelsystem sind mir nicht bekannt.
Visual Basic ist eine Sprache, die u.a. der Erstellung von gut
lesbarem Code dienen soll.
Ich würde deshalb in Abfragen informative (zusammengesetzte) Bezeichner
einsetzen: TabellenBezeichner_Spaltenbezeichner_DatentypBezeichner
(z.B. Kreditoren_Zuname_String).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: viktor8
Datum: 06.07.18 13:23

Dim myUpdCommand As New SqlCeCommand("Update Kreditoren Set Name =" & _
"tbxName.Text, ZuName = tbxZuName.Text WHERE Id = myId", myConnection) falsch!!!!!!!

Richtig:

Dim myUpdCommand As New SqlCeCommand("Update Kreditoren Set Name ='" & _
tbxName.Text & "', ZuName ='" & tbxZuName.Text & "' WHERE Id =" & tbxId.Text & ", myConnection)"
Stringvariable Stringvariable Numerisch

Die Stringvariablen müssen durch ' vorher und ' nachher gekennzeichet werden und dürfen nicht direkt in den UPDATE-String eingebracht werden - alles was zwischen " " steht ist das UPDATE.Kommando, alles zwischen & & sind Variablen.

LG Viktor
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL - Where im Update Command mit Variabler 
Autor: Franki
Datum: 08.07.18 01:48

Hallo,
na stimmt so nicht wirklich. Wenn Variablen typgerecht deklariert und verwendet werden besteht keine Notweindigkeit die in einfache Anführungszeichen zu setzen, schon gar nicht wenn der Typ mit dem in der DB überein stimmt.

Um Strings zu kennzeichnen ist das richtig die müssen in einfache Anführungszeichen gesetzt werden. aber das ist eigentlich niczth Thema dieses Threads sondern eher Grundlagenwissen in Sachen SQL (Egal af welche DB man das ab schickt)

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel