2017-04-05 4 views
0

Ich habe diese Funktion, die bestimmte Informationen des Studenten aus der Datenbank zurückgeben. Hier ist der Code.Funktion Array von Datenbank zurückgeben

Public Function arrInfo(Byval id as String) 
    Dim name as String = "" 
    DBCon_Open() 
    Dim Cmd = New MySqlCommand("SELECT * FROM student WHERE student_id ='" & id & "'", con) 
    Cmd.CommandTimeout = 0 
    Dim rs = Cmd.ExecuteReader 

    Do While rs.Read 
     name = rs.Item("firstname") 
    Loop 
    rs.Close() 
    Cmd.Dispose() 
    DBCon_Close() 

    Return name 

End Function 

MsgBox (arrInfo ("STUD0027"))

Ergebnis: Ben

Aber, ich möchte eine Reihe von Informationen von einem Studenten aus der Abfrage zurückzukehren.

Wenn ich die Funktion es etwas nennen so geht:

MsgBox (. ArrInfo ("STUD0027") ("Nachname"))

Ich habe versucht, dieses aber nicht funktioniert.

Public Function arrInfo(Byval id as String) 

    DBCon_Open() 
    Dim Cmd = New MySqlCommand("SELECT * FROM student WHERE student_id ='" & id & "'", con) 
    Cmd.CommandTimeout = 0 
    Dim rs = Cmd.ExecuteReader 
    rs.Close() 
    Cmd.Dispose() 
    DBCon_Close() 

    Return rs.Read 

End Function 

Wie kann ich diese Array-Rückgabe erreichen?

Jede Hilfe sehr geschätzt.

Dank

+0

Sie sollten in parametrisierte Abfragen suchen. –

Antwort

1

Try this:

Public Iterator Function arrInfo(Byval id as String) As IEnumerable(Of IDataRecord) 
    'In most cases, the best practice in .Net is to use a new connection object each time, to take advantage of connection pooling 
    Using cn As New MySqlConnection(DBCon.ConnectionString), _ 
      cmd As New MySqlCommand("SELECT * FROM student WHERE student_id = @id", cn) 

     cmd.Parameters.Add("@id", MySqlDbType.VarChar, 8).Value = id 
     cn.Open() 

     Using rdr = cmd.ExecuteReader() 
      While rdr.Read() 
       Yield Return rdr 
      End While 
      rdr.Close() 
     End Using 
    End Using 'Using block will close and dispose your connection, **even if an exception is thrown**. The existing code would have left it hanging open. 
End Function 

Es ist nicht gerade ein Array, aber es hat einige ähnliche Eigenschaften. Sie können es wie folgt verwenden:

For Each record As IDataRecord In arrInfo("STUD0027") 
    MsgBox(String.Format("Name: {0} {1}", record("firstname"), record("lastname"))) 
Next record 

Sie auch in die DataTable und DataSet Objekte aussehen sollte.

+0

ok ich werde das versuchen..danke – user3451123

Verwandte Themen