Returning Multiple Recordsets Using a Separate DataLayer - Demo


<%@ Page Language="VB" %>
<%@ Import Namespace="System.Collections.Generic" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
 
    Private Sub Page_Load()
        ' Get database data
        Dim categories As New List(Of DataLayer1.MovieCategory)()
        Dim movies As New List(Of DataLayer1.Movie)()
        DataLayer1.GetMovieData(categories, movies)
 
        ' Bind the data
        grdCategories.DataSource = categories
        grdCategories.DataBind()
        grdMovies.DataSource = movies
        grdMovies.DataBind()
    End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show DataLayer1</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    <h1>Movie Categories</h1>
    <asp:GridView
        id="grdCategories"
        Runat="server" />
        
    <h1>Movies</h1>    
    <asp:GridView
        id="grdMovies"
        Runat="server" />    
    
    </div>
    </form>
</body>
</html>


** DataLayer1.vb **

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Configuration
Imports System.Collections.Generic

Public Class DataLayer1
    Private Shared ReadOnly _connectionString As String

    Public Class MovieCategory
        Private _id As Integer
        Private _name As String

        Public Property Id() As Integer
            Get
                Return _id
            End Get
            Set(ByVal Value As Integer)
                _id = value
            End Set
        End Property

        Public Property Name() As String
            Get
                Return _name
            End Get
            Set(ByVal Value As String)
                _name = value
            End Set
        End Property
    End Class

    Public Class Movie
        Private _title As String
        Private _categoryId As Integer

        Public Property Title() As String
            Get
                Return _title
            End Get
            Set(ByVal Value As String)
                _title = value
            End Set
        End Property

        Public Property CategoryId() As Integer
            Get
                Return _categoryId
            End Get
            Set(ByVal Value As Integer)
                _categoryId = value
            End Set
        End Property
    End Class

    Public Shared Sub GetMovieData(ByVal movieCategories As List(Of DataLayer1.MovieCategory), ByVal movies As List(Of DataLayer1.Movie))
        Dim commandText As String = "SELECT Id,Name FROM MovieCategories;SELECT Title,CategoryId FROM Movies"
        Dim con As New SqlConnection(_connectionString)
        Dim cmd As New SqlCommand(commandText, con)
        Using con
            ' Execute command
            con.Open()
            Dim reader As SqlDataReader = cmd.ExecuteReader()

            ' Create movie categories
            While reader.Read()
                Dim NewCategory As New DataLayer1.MovieCategory()
                NewCategory.Id = CType(reader("Id"), Integer)
                NewCategory.Name = CType(reader("Name"), String)
                movieCategories.Add(NewCategory)
            End While

            ' Move to next result set
            reader.NextResult()

            ' Create movies
            While reader.Read()
                Dim NewMovie As DataLayer1.Movie = New DataLayer1.Movie()
                NewMovie.Title = CType(reader("Title"), String)
                NewMovie.CategoryId = CType(reader("CategoryID"), Integer)
                movies.Add(NewMovie)
            End While
        End Using
    End Sub

    Shared Sub New()
        _connectionString = WebConfigurationManager.ConnectionStrings("MyDatabase").ConnectionString
    End Sub
End Class