Based on your procedure, I don't see how your data is hierarchic. But I did notice some room for improvement in your code, so here are some modifications with notes.
I haven't tested this code, so it might have errors but it is close enough. Also, I haven't written long hand data access code in a while but I think it is right. One thing I wanted to note is the fact that in your code you call ExecuteNonQuery and then ExecuteReader on the command, the ExecuteNonQuery is completely unnecessary.
'More times than not, class scoped variables are not necessary. In your code, they are not saving any memory and they could bite your arse down the road.
'You really don't want to worry about whether a connection is closed/created, a data reader is still open, etc. Just declare them when you need them and get rid of them when you're done.
Sub Page_Load(ByVal Sender As Object, ByVal E As EventArgs)
Dim electionResultSet As New DataSet
'You should really considering moving data access and most logic into their own layers.
Dim connString As String = System.Configuration.ConfigurationManager.AppSettings("strConn")
Using conn As New SqlConnection(connString)
Using da As New SqlDataAdapter("spElectionResults", conn)
'Assuming you have an ASP Repeater with an Id of "ElectionResultsRepeater"
Me.ElectionResultsRepeater.DataSource = electionResultSet.Tables(0)
'After some refactoring, your code might look like this and your concerns have been separated.
'Me.ElectionResultsRepeater.DataSource = ElectionResults.GetElectionResults()