Announcement

Collapse
No announcement yet.

dynamische Parameterabfrage aus VB an SQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • dynamische Parameterabfrage aus VB an SQL

    Hallo liebe Gemeinde...

    Ich möchte dem User gern ein Suchfeld für einen Datentabelle zur Verfügung stellen, dazu lese ich die Spaltenköpfe vom SQL aus und übergebe sie an eine Combobox siehe hier:
    Code:
    Dim dt As DataTable = Me.DataSetStatistik.Statistik
            Dim drc As DataColumnCollection = dt.Columns
            Dim count As Int32 = drc.Count - 1
            Dim items(count - 1) As Object
            ComboBox1.Items.Clear()
            For i As Int32 = 0 To count - 1
                items(i) = drc(i).ColumnName
            Next
            ComboBox1.Items.AddRange(items)
    Jetzt soll mir der User dort also das Feld sagen, welches der Filter sein soll.
    In einer Textbox daneben soll er mir den Wert eintragen nachdem gefiltert wird.

    das ganze soll nun an den SQL gehen:

    Code:
    Dim Suchwert As String = "'" & BoxValue.Text & "'"
    Me.StatistikTableAdapter.SelectbySearch_ 
    (Me.DataSetStatistik.Statistik, BoxSearchField.Text, Suchwert)
    Füllen wir das ganze mit Leben sollte das so aussehen:
    BoxSearchField.Text = "UserID"
    BoxValue.Text = "UndSH"
    Er soll jetzt also am SQL abfragen
    Code:
    Select * from Statistik where UserID = UndSH
    Problem ist das der UserID nicht als das zu durchsuchende Feld versteht.
    Wo ist mein Denkfehler??
    Ich hab keine Ahnung was ich tue aber ich will es lernen

  • #2
    ich weiß momentan nicht, wie SelectbySearch(..) funktioniert, aber üblicherweise muss bei solchen Funktionen die Spalte angeben, nicht den Spaltennamen, also möglicherweise fehlt ihm einfach so etwas wie getColumnByName(BoxSearchField.Text)

    Ansonsten, ist der SQL-text, den Du als Beispiel aufführst natürlich falsch: Wenn nach dem Text UndSH gefiltert werden soll, muss der natürlich in Anführungszeichen stehen, sollte dieser SQL-text also irgendwo aus deinem Programm heraus kommen, liegt die fehlerursache da

    Comment


    • #3
      Und bitte mit parametrisierten Abfragen arbeiten. SQL-Injection per Suchbegriff "'; DROP DATABASE;" ist sonst Tür und Tor geöffnet.

      Comment


      • #4
        Select * from Statistik where UserID = UndSH
        Zeig uns mal den Code mit dem du das SQL zusammengesetzt hast oder wenn du wirklich SQL Parameter verwendet hast für welche Teile.

        Comment


        • #5
          Danke erstmal an alle für euer Feedback...

          Originally posted by M.Dietz View Post
          ich weiß momentan nicht, wie SelectbySearch(..) funktioniert, aber üblicherweise muss bei solchen Funktionen die Spalte angeben, nicht den Spaltennamen, also möglicherweise fehlt ihm einfach so etwas wie getColumnByName(BoxSearchField.Text)

          Ansonsten, ist der SQL-text, den Du als Beispiel aufführst natürlich falsch: Wenn nach dem Text UndSH gefiltert werden soll, muss der natürlich in Anführungszeichen stehen, sollte dieser SQL-text also irgendwo aus deinem Programm heraus kommen, liegt die fehlerursache da
          Die Idee mit getColumnbyName muss ich ausprobieren.

          Hier hast du zu deinem zweiten Teil das Gegenstück, die Hochkommata werden per String übergeben, deshalb auch die Variable "Suchwert" und nicht das Feld aus dem Form...
          [QUOTE=Undeathly_Shadow;228740]Hallo liebe Gemeinde...
          Code:
          Dim Suchwert As String = "'" & BoxValue.Text & "'"Me.StatistikTableAdapter.SelectbySearch_ 
          (Me.DataSetStatistik.Statistik, BoxSearchField.Text, Suchwert)
          [QUOTE]

          ansonsten sind die Zugriffe auf die Tabelle per Designer erzeugt,
          SelectbySearch hat also den Inhalt
          Code:
          SELECT     DatumUhrzeit, UserID, ProNr, SymName, OutName, From, Name, Betreff, art, Bazug, Gruppe
          FROM         Statistik
          WHERE     (@Feld = @Wert)
          ORDER BY DatumUhrzeit
          @Feld ist also das wo BoxSearchField.Text eingefügt werden soll
          @Wert ist die Variable Suchwert welche aus "'" & BoxValue.Text & "'" besteht
          Ich hab keine Ahnung was ich tue aber ich will es lernen

          Comment


          • #6
            Originally posted by M.Dietz View Post
            aber üblicherweise muss bei solchen Funktionen die Spalte angeben, nicht den Spaltennamen, also möglicherweise fehlt ihm einfach so etwas wie getColumnByName(BoxSearchField.Text)
            hast du dazu ein Stück code?
            ich hab noch nix...

            THX schon mal...
            Ich hab keine Ahnung was ich tue aber ich will es lernen

            Comment


            • #7
              Hi undeathly_shadow,

              Code direkt habe ich nicht, aber es sollte üblicherweise so etwas sein wie
              [highlight=vbnet]
              Private Function GetColumnIndexByName(myDataTable as DataTable, ColName as String) As Integer
              For i = 0 To myDataTable.Columns.Count-1
              If myDataTable.Columns(i).Name=ColumnName then Return i
              Next
              Return -1
              End Function
              [/highlight]

              Du musst dann halt selbst prüfen, ob die Spalte überhaupt gefunden wurde, und greifst dann über den Index auf die Spalte zu, es sollte nur verdeutlichen, dass Du darauf achten solltest, was benötigt wird, und nicht die Namen der Instanzen mit den Instanzen selbst verwechselst.

              Übrigens solltest Du generell darauf achten: SelectBySaerch kann nicht den Inhalt haben, den Du angibst, da Du es als Funktion benutzt. Bestenfalls hoffst Du, dass SelectBySearch dasselbe Ergebnis liefert, wie eine SQL-Abfrage des entsprechenden Inhaltes, da das aber anhand Deiner Fragestellung anscheinend nicht so ist, solltest Du deutlicher werden, was Du wie wo verwendest und woher die entsprechenden Informationen kommen (sollen).

              Gerade dann, wenn man Dir effizient helfen soll, müsstest Du darauf achten, dass Du Deine Fragen mit einer entsprechenden Präzision stellst, bei dem was Du bisher geschrieben hast, gibt es einfach zu wenig spezifische Informationen, um einen vernünftigen Hilfsansatz zu erkunden.

              Gruß
              Martin

              Comment

              Working...
              X