2011-10-26 155 views
0

我想根據用戶名輸出一些數據給用戶。該數據保存在鏈接到aspnet_Users表的表中。我試圖寫一個sqldatareader作爲函數的一部分,所以我不必在可以從多個頁面調用代碼時重寫代碼。我知道這可能是非常簡單的丁,我似乎無法從函數外部訪問數據。目前爲止我的功能如下:從函數內的sqldatereader訪問數據

Public Shared Function AgencyDetails() As SqlDataReader 
    Dim details As String = "SELECT * FROM tbl_Relationships WHERE ContactSub = @Username" 
    Dim connString As String = ConfigurationManager.ConnectionStrings("ApplicationServices").ConnectionString 

    Using dbConnection As New SqlConnection(connString) 
     dbConnection.Open() 
     Dim cmdAgency As New SqlCommand(details, dbConnection) 
     cmdAgency.Parameters.AddWithValue("@Username", membership.getuser) 
     Return cmdAgency.ExecuteReader() 


    End Using 
End Function 

如何調用此函數並訪問我的頁面上的信息?像下面這樣的東西?

lblAgencyDetails.text = AgencyDetails(0) 

感謝

回答

0

你有現在,它不會工作,因爲你封閉在using語句的連接的方式,你的時間返回Reader的連接將被關閉,並佈置成的讀者將無法閱讀任何內容。

你應該在該函數中執行的操作是將信息加載到DataTable並返回數據表。

例子:

Public Shared Function AgencyDetails() As DataTable 
    Dim details As String = "SELECT * FROM tbl_Relationships WHERE ContactSub = @Username" 
    Dim connString As String = ConfigurationManager.ConnectionStrings("ApplicationServices").ConnectionString 

    Using dbConnection As New SqlConnection(connString) 
     dbConnection.Open() 
     Dim cmdAgency As New SqlCommand(details, dbConnection) 
     cmdAgency.Parameters.AddWithValue("@Username", membership.getuser) 
     Dim dt as new DataTable() 
     dt.Load(cmdAgency.ExecuteReader()) 
     return dt 

    End Using 
End Function 

您可以通過執行訪問在數據表中的行:

For Each row as DataRow in dt.Rows 
    Console.WriteLine(row("ColumnName")) 
Next 
+0

如何將結果輸出到我的aspx頁面? – ajguk

+0

@ajguk檢查我的更新。 「ColumnName」應該是您的select語句中返回的其中一列的名稱。順便說一句,你應該避免做'select *';這是一個可怕的做法。 – Icarus

+0

嗨,我知道,它只是當我得到它的工作,我通常會檢索我需要的列!比開始時全部輸入更快......! – ajguk

0

爲了能夠從DataReader對象檢索數據,你應該調用read( )方法:

While reader.Read() 
     Console.WriteLine(String.Format("{0}, {1}", _ 
      reader(0), reader(1))) 
    End While 

此方法將SqlDataReader移動到下一條記錄。