Un altro metodo è creare la source in pagina e passarla al report.

codice:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here


        Dim cnn As New SqlConnection("Data Source=localhost;Initial Catalog=northwind;User ID=sa;Password=;Persist Security Info=True")
        Dim cmd As New SqlCommand("Select * from categories", cnn)
        Dim da As New SqlDataAdapter
        Dim ds As New DataSet
        Dim dt As New DataTable("Pippo")

        cnn.Open()
        da.SelectCommand = cmd
        da.Fill(dt)
        cnn.Close()

        ds.Tables.Add(dt)
        ds.WriteXmlSchema("c:\test\test.xsd")

        Dim c As New CrystalReport1
        c.Load()
        c.SetDataSource(dt)

        Me.CrystalReportViewer1.ReportSource = c
        Me.CrystalReportViewer1.DataBind()

    End Sub
Ho aggiunto questa riga

ds.WriteXmlSchema("c:\test\test.xsd")

Per farmi lo scrivere lo schema risultato della mia query e cioè dei dati che verranno passati al report.
Questo ti serve soprattutto quando devi disegnare il report.

Quando aggiungi una connessione al db seleziona "Database Files" e poi cerchi il file xsd di prima.

Il codice che ti ho postato sopra l'ho testato e funziona con il db Northwind.

Ricorda di creare la cartella test e dare le permission all'utente aspnet per scrivere il file.

Fammi sapere
Ciao
K