2016-05-12 2 views
2

Ich versuche eine Funktion zu schreiben, die Datensätze in meiner Datenbank nach dem Objekt derjenigen sucht, die mit der SearchCriteria übereinstimmen. Die Funktionen Parameter aussehen so:Datensätze in der Datenbank nach denen suchen, die mit dem übereinstimmen, was ein Benutzer eingibt

RetrieveObject(SearchCriteria) As String (SearchCritera is a string aswell)

Gerade jetzt zu Testzwecken ich eine Konsole app verwenden, die den Benutzer auffordert, nach Vornamen zu suchen.

Console.Writeline("Search by first name: ") Dim firstName = Console.Readline()

ich meine Funktion dann verwenden: RetrieveObject(firstName)

ich meine Funktion möchte alle Werte anzuzeigen (Nachname, titlename, Bundesland, Postleitzahl) für diese bestimmte Person, die auf die RetrieveObject Funktion übergeben wurde.

Das Problem, das ich habe, ist, dass ich nicht zu verstehen scheinen, wie ich dem entsprechen werde, was der Benutzer mit dem Wert in der Datenbank eingibt.

Wenn mich jemand in die richtige Richtung bringen könnte, um mir zu helfen, das zu verstehen, wäre ich so dankbar!

Hier ist mein Code so weit:

Private Function RetrieveObject(SearchCriteria As String) As String 

    Dim cn As OdbcConnection = New OdbcConnection(myCon) 

    Dim myQuery = "SELECT * FROM Applicant WHERE [strFirstName] LIKE '%son'" 

    Using com As New OdbcCommand(myQuery) 

     cn.Open() 
     com.Connection = cn 
     com.CommandType = CommandType.Text 
     com.CommandText = myQuery 
     com.Parameters.AddWithValue("@strFirstName", SearchCriteria) 

     Try 
      com.ExecuteReader() 
     Catch ex As Exception 
      MsgBox(ex.Message.ToString()) 
     End Try 

    End Using 

    Return SearchCriteria 

End Function 

Nochmals vielen Dank!

+0

Es scheint, dass strFirstName kein Feld der Tabelle Antragsteller ist. Wie lautet der tatsächliche Name der Spalte, die die gesuchten FirstNames enthält? – Steve

+0

strFirstName ist der Name eines Felds in der Tabelle Applicant. Außerdem ist die Variable firstName, die zum Speichern der Benutzereingabe von der Konsole verwendet wird, tatsächlich Public. – TimmyHoHoo

Antwort

2

Um eine WHERE-Bedingung zu erstellen, müssen Sie dem Datenbankmodul (auf der grundlegendsten Ebene) drei Informationen bereitstellen. Das erste Bit ist der Spaltenname, nach dem Sie suchen möchten, ist das zweite Stück der Betreiber, die Sie für passende Datensätze verwenden möchten, und schließlich der Wert für

SELECT * FROM table WHERE FieldName = 'AStringValue' 

Natürlich suchen wir viel haben könnte Variationen mit Operatoren und Feld-Datentyp, aber diese Antwort ist auf Ihre tatsächliche Situation beschränkt.

Es ist wichtig zu beachten, dass Ihre Abfrage mehr als einen Datensatz zurückgeben kann (insbesondere wenn Sie Platzhalteroperatoren als LIKE hinzufügen, sodass Sie nicht einfach einen einzelnen Wert mit dieser Abfrage zurückgeben können, sondern stattdessen eine DataTable zurückgeben Schleife über die Zeilen Sammlung alle Datensätze von der Abfrage zurückgegeben, um zu sehen

So sollten Sie Ihren Code

Private Function RetrieveObject(SearchCriteria As String) As DataTable 
    Dim myQuery = "SELECT * FROM Applicant WHERE [strFirstName] LIKE ?" 
    Try 
     Using cn = New OdbcConnection(myCon) 
     Using da = new OdbcDataAdapter(myQuery, cn) 
      da.SelectCommand.Parameters.Add("?", OdbcType.VarChar).Value = SearchCriteria 
      Dim dt = new DataTable() 
      da.Fill(dt) 
      return dt 
     End Using 
     End Using 
    Catch ex As Exception 
     MsgBox(ex.Message.ToString()) 
     return Nothing 
    End Try 
End Function 

nun geändert werden Sie diese Methode mit so etwas wie

nennen könnte
Dim table = RetrieveObject("John%") 
if table IsNot Nothing Then 
    For Each row in table.Rows 
     Console.WriteLine(row["strFirstName"].ToString()) 
    Next 
End If 

Wenn Sie wirklich eine JSON-String mit allen Vorname angepasst zurückkehren müssen, dann können Sie dies mit den letzten Zeilen des Codes über

..... 
da.Fill(dt) 
Dim names = dt.AsEnumerable().Select(Function(x) x.Field(Of String)("strFirstName")).ToArray() 
string output = JsonConvert.SerializeObject(names); 
return output; 

Und natürlich Änderung wieder hinzufügen der Rückgabewert ein String zu sein.

+0

Steve, das sieht alles super aus! Das erste, was mir aufgefallen ist, ist, dass die Funktion eine DataTable zurückgibt. Ich schätze, ich habe nicht klargestellt, dass es eine 'Zeichenfolge' zurückgeben muss. Ich werde allerdings mit diesem Code herumalbern! :) Nochmals vielen Dank!! Ich werde dich wissen lassen, wie ich es sehe. – TimmyHoHoo

+0

Sie können keine Sammlung von Datensätzen als Zeichenfolge zurückgeben - in keiner sinnvollen Weise jedenfalls – Plutonix

+0

Es tut mir leid, ich muss es noch mehr klären! Lol. Ich muss eine JSON-Zeichenfolge zurückgeben, die ein Array von Objekten enthält, die den Kriterien entsprechen. Ich werde später darauf eingehen, wenn ich mehr Hilfe brauche. – TimmyHoHoo

0

Sie können Ihre Suchkriterien in die Funktion übergeben, die dataset zurück, wie unten dargestellt, eine weitere Sache, können Sie die Funktion in Textbox textchange Ereignis in Formen

auch verwenden, während Suche enthalten LIKE als LIKE '%" & @strFirstName & "%', die Ihnen helfen können enge Suchergebnisse bei Bedarf

Public Function Search(ByVal Criteria As String) As DataSet 
     Try 
      Dim ds As New DataSet 
      Using sqlCon As New SqlConnection(connStr) 
      stQuery="SELECT * FROM Applicant WHERE [strFirstName] 
        LIKE '%" & @strFirstName & "%'" 
       Dim sqlCmd As New SqlCommand(stQuery, sqlCon) 
       Dim sqlAda As New SqlDataAdapter(sqlCmd) 
       sqlCmd.CommandType = CommandType.Text 
       sqlCmd .Parameters.AddWithValue("@strFirstName", Criteria) 
       sqlAda.Fill(ds) 
      End Using 
      Return ds 
     Catch ex As Exception 
      MsgBox(ex.Message.ToString()) 
     End Try 
    End Function 
Verwandte Themen