Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich habe folgende Abfrage gebastelt.

SELECT (UNTERNEHMEN.FIRMA1), (UNTERNEHMEN.FIRMA2), (UNTERNEHMEN.STRASSE), (UNTERNEHMEN.LKZ), (UNTERNEHMEN.PLZ), (UNTERNEHMEN.ORT), (PERSONEN.ANREDE), (PERSONEN.TITEL), (PERSONEN.VORNAME), (PERSONEN.NACHNAME), (PERSONEN.EMAIL_GESCHAEFTLICH1), (PERSONEN.TELEFON_GESCHAEFTLICH1), (PERSONEN.TELEFAX_GESCHAEFTLICH1) FROM (UNTERNEHMEN) INNER JOIN ((PERSONEN) INNER JOIN ((MEDIEN) INNER JOIN (BEZIEHUNGEN) ON (MEDIEN.MEDIUM_ID) = (BEZIEHUNGEN.MEDIUM_ID_1)) ON (PERSONEN.PERSON_ID) = (BEZIEHUNGEN.PERSON_ID_1)) ON (UNTERNEHMEN.UN_ID) = (BEZIEHUNGEN.UN_ID_1) WHERE(((BEZIEHUNGEN.KUNDE_ID_1) = 730) And ((BEZIEHUNGEN.BEZIEHUNGSTYP_ID) = 4) And ((MEDIEN.MEDIUM_ID) = 4393 ) And ((BEZIEHUNGEN.FUNKTION_ID_1) = 1) AND ((PERSONEN.AUSGESCHIEDEN) = 0)) GROUP BY (UNTERNEHMEN.FIRMA1), (UNTERNEHMEN.FIRMA2), (UNTERNEHMEN.STRASSE), (UNTERNEHMEN.LKZ), (UNTERNEHMEN.PLZ), (UNTERNEHMEN.ORT), (PERSONEN.ANREDE), (PERSONEN.TITEL), (PERSONEN.VORNAME), (PERSONEN.NACHNAME), (PERSONEN.EMAIL_GESCHAEFTLICH1), (PERSONEN.TELEFON_GESCHAEFTLICH1), (PERSONEN.TELEFAX_GESCHAEFTLICH1)

Wenn ich diese Im SQL-Server-Query-Analyzer ausführe, bekomme ich auch meine Ergebnisse. Wenn ich sie im VB-Code ausführen möchte, bekomme ich die Fehlermeldung

Ungültiger Objektname 'UNTERNEHMEN'. Ungültiger Objektname 'PERSONEN'. Ungültiger Objektname 'MEDIEN'. Ungültiger Objektname 'BEZIEHUNGEN'.

Kann mir jemand sagen, wo der Fehler liegt?

Gruß

Christian

con.Open()

Dim sSQLDUP As String = "SELECT (UNTERNEHMEN.FIRMA1), (UNTERNEHMEN.FIRMA2), (UNTERNEHMEN.STRASSE), (UNTERNEHMEN.LKZ), (UNTERNEHMEN.PLZ), (UNTERNEHMEN.ORT), (PERSONEN.ANREDE), (PERSONEN.TITEL), (PERSONEN.VORNAME), (PERSONEN.NACHNAME), (PERSONEN.EMAIL_GESCHAEFTLICH1), (PERSONEN.TELEFON_GESCHAEFTLICH1), (PERSONEN.TELEFAX_GESCHAEFTLICH1) " & _

"FROM UNTERNEHMEN INNER JOIN (PERSONEN INNER JOIN (MEDIEN INNER JOIN BEZIEHUNGEN ON (MEDIEN.MEDIUM_ID) = (BEZIEHUNGEN.MEDIUM_ID_1)) ON (PERSONEN.PERSON_ID) = (BEZIEHUNGEN.PERSON_ID_1)) ON (UNTERNEHMEN.UN_ID) = (BEZIEHUNGEN.UN_ID_1) " & _

"WHERE(((BEZIEHUNGEN.KUNDE_ID_1) = " & frmHaupt.KID & ") And ((BEZIEHUNGEN.BEZIEHUNGSTYP_ID) = 4) And ((MEDIEN.MEDIUM_ID) = " & MedienID & " ) And ((BEZIEHUNGEN.FUNKTION_ID_1) = 1) AND ((PERSONEN.AUSGESCHIEDEN) = 0)) " & _

"GROUP BY (UNTERNEHMEN.FIRMA1), (UNTERNEHMEN.FIRMA2), (UNTERNEHMEN.STRASSE), (UNTERNEHMEN.LKZ), (UNTERNEHMEN.PLZ), (UNTERNEHMEN.ORT), (PERSONEN.ANREDE), (PERSONEN.TITEL), (PERSONEN.VORNAME), (PERSONEN.NACHNAME), (PERSONEN.EMAIL_GESCHAEFTLICH1), (PERSONEN.TELEFON_GESCHAEFTLICH1), (PERSONEN.TELEFAX_GESCHAEFTLICH1)"

Dim DRDUP_KuAP As DbDataReader

Dim SQLDUP_KuAP As New SqlCommand(sSQLDUP, con)

DRDUP_KuAP = SQLDUP_KuAP.ExecuteReader

Das ist der Code wo es ausgeführt wird. Danach werden die einzelnen Werte an Variablen übergeben, welche für die weitere Arbeit verwendet werden.

Vermutlich gehst du mit einem anderen User auf den Server oder hast eine andere Datenbank im Connection-String, dann stimmen die Schema-Informationen nicht mehr.

Zudem (ich habe da durchaus missionarische Ansprüche) ist es eine schlechte Vorgehensweise das SQL Command auf diese Weise in den Code zu kneten, das wird irgendwann unwartbar. Besser ist es so ,funktioniert unter VB.NET genau so.

Wow da vergeht einem ja die Lust die Querry zu analysieren. Versuchs mal mit einer anderen, angenehmeren Formatierung.

Kleiner Hinweis zu SQL. SQL hat gerne mal die Eigenschaft Spaltennamen die schon belegt sind oder umlaute oder sonstiges enthalten, umzubennen. Sprich der SQL server macht in solchen Fällen zwei eckige Klammern um den Namen, was man oft nicht gleich merkt.

Geh einfach mal in den Serverexplorer und schau dir mal die Spalten an. Spätestens dann siehst du ob es daran gelegen hat.

Lg

Gateway

Dim sSQLDUP As String =

"SELECT [uNTERNEHMEN].[FIRMA1],

[uNTERNEHMEN].[FIRMA2],

[uNTERNEHMEN].[sTRASSE],

[uNTERNEHMEN].[LKZ],

[uNTERNEHMEN].[PLZ],

[uNTERNEHMEN].[ORT],

[PERSONEN].[ANREDE],

[PERSONEN].[TITEL],

[PERSONEN].[VORNAME],

[PERSONEN].[NACHNAME],

[PERSONEN].[email_GESCHAEFTLICH1],

[PERSONEN].[TELEFON_GESCHAEFTLICH1],

[PERSONEN].[TELEFAX_GESCHAEFTLICH1]

" & _

"FROM UNTERNEHMEN INNER JOIN

(PERSONEN INNER JOIN

(MEDIEN INNER JOIN BEZIEHUNGEN ON

[MEDIEN].[MEDIUM_ID] = [bEZIEHUNGEN].[MEDIUM_ID_1]) ON [PERSONEN.PERSON_ID] = [bEZIEHUNGEN.PERSON_ID_1]) ON [uNTERNEHMEN.UN_ID] = [bEZIEHUNGEN.UN_ID_1]

" & _

"WHERE(([bEZIEHUNGEN].[KUNDE_ID_1] = " & frmHaupt.KID & ")

And ([bEZIEHUNGEN].[bEZIEHUNGSTYP_ID] = 4) And

([MEDIEN].[MEDIUM_ID] = " & MedienID & " )

And ([bEZIEHUNGEN].[FUNKTION_ID_1] = 1)

AND ([PERSONEN].[AUSGESCHIEDEN] = 0)) "

& _

"GROUP BY [uNTERNEHMEN].[FIRMA1],

[uNTERNEHMEN].[FIRMA2],

[uNTERNEHMEN].[sTRASSE],

[uNTERNEHMEN].[LKZ],

[uNTERNEHMEN].[PLZ],

[uNTERNEHMEN].[ORT],

[PERSONEN].[ANREDE],

[PERSONEN].[TITEL],

[PERSONEN].[VORNAME],

[PERSONEN].[NACHNAME],

[PERSONEN].[email_GESCHAEFTLICH1],

[PERSONEN].[TELEFON_GESCHAEFTLICH1],

[PERSONEN].[TELEFAX_GESCHAEFTLICH1]"

Hoffe es ist nun leichter zu lesen. Ich habe es nun mit den eckigen-Klammer versucht, bekomme aber die gleiche Fehlermeldung.

" gilt nur für eine Zeile.

Ergo:

Dim sSQLDUP As String = _

"SELECT [UNTERNEHMEN].[FIRMA1], " & _

"[UNTERNEHMEN].[FIRMA2], " & _

"[UNTERNEHMEN].[STRASSE], " & _

"[UNTERNEHMEN].[LKZ], " & _

"[UNTERNEHMEN].[PLZ], " & _

"[UNTERNEHMEN].[ORT], " & _

"[PERSONEN].[ANREDE], " & _

"[PERSONEN].[TITEL], " & _

"[PERSONEN].[VORNAME], " & _

"[PERSONEN].[NACHNAME], " & _

"[PERSONEN].[EMAIL_GESCHAEFTLICH1], " & _

"[PERSONEN].[TELEFON_GESCHAEFTLICH1], " & _

"[PERSONEN].[TELEFAX_GESCHAEFTLICH1] " & _

usw.

[Editerle]

Probiers mal mit StoredProcedures + Parameter sonst kommt noch jemand auf die Idee SQL-Injektion zu betreiben. :floet:

Hallo,

entschuldigung, wenn es nicht so rüber kommt. ich habe das Query hier untereinander geschrieben. Im Quellcode ist das " & _ das ende der Zeile.

Der Fehler tritt zur Laufzeit auf.

Der Connectionstring stimmt auch.

Ok, das ist soweit ichs seh kein .Net Fehler (dein Programm das de da schreibst), das ist SQL Fehler.

Also, was haben wir da an Fehlerquellen, wenns im SQL Managmentstudio tut, ich würd sagen der Connection String, da der nicht gepostet wurd, und wir auch nicht wissen wie was wo die DB aussieht, kann mans nicht beschreien.

Aber, eines is recht offensichtlich, deine Tabellen werden nicht gefunden.

Mach mal folgendes, statt im From Teil deiner Abfrage nur den Tabellennamen zu schreiben, nimm da mal den DB namen mit.

Also im Sinne von

SELECT *

FROM meineDB.dbo.Tabelle1

Das schadet nie wenn man sagen mer mal die ausführliche Schreibweise benutzt, gibt ja Aliase damit man sich nich tot schreibt dran.

Und mhhm, so n bissl einrücken tut auch SQL sehr gut wenn mans hinterher lesen können will.

Zusätzlich würd ich mal n paar Aliase vergeben, und nicht Klammern setzen damit Klammern gesetzt sind, sonder nur da Klammern, wo man ne Klammer semantisch auch braucht.

Gruß

Sven

Bearbeitet von streffin

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.