2017-04-05 2 views
0

私はデータベースから学生の特定の情報を返すこの関数を持っています。 コードは次のとおりです。機能データベースから配列を返します

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"))

結果:ベン

しかし、私は、クエリからの学生の情報の配列を返すようにしたいです。

私は関数を呼び出すとき、それはこのようなものになる:(。arrInfo( "STUD0027"))( "姓")

のMsgBoxを

私はこの1つを試みたが、動作していません。

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 

この配列を返すにはどうしたらいいですか?

ご協力いただきありがとうございます。

おかげ

+0

パラメータ化されたクエリを調べる必要があります。 –

答えて

1

はこれを試してみてください:

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 

それはまさに、配列ではないが、それはいくつかの類似した性質を持っています。あなたはこのようにそれを使用することができます:あなたはまた、DataTableDataSetオブジェクトになります

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

+0

ok私はこれを試してみよう。 – user3451123

関連する問題