将DataReader绑定到ASP.NET Repeater

时间:2013-04-30 11:37:37

标签: asp.net vb.net

我现在花了太长时间,而且我很确定我非常接近解决方案,但我只需要一点点“推动”。

我想从我的桌子'FamousQuotes'中抓取所有字段并在转发器中重复它们。不幸的是,这一点不起作用;我没有得到任何编译时错误,但我也没有看到任何数据在我的转发器中出现在运行时

这是我背后的代码:

Sub randomQuote()
        Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
        conn.Open()
        Dim cmd As New OleDbCommand("SELECT TOP 1 * FROM [FamousQuotes] ORDER BY rnd(INT(NOW*id)-NOW*id)", conn)
        cmd.ExecuteNonQuery()
        Dim datareader As OleDbDataReader = cmd.ExecuteReader()
        If datareader.HasRows Then
            datareader.Read()
            quoteCascade.DataSource = datareader
            quoteCascade.DataBind()
            datareader.Close()
            datareader = Nothing
        End If

        conn.Close()
    End Sub

你可能不需要看到我的转发器代码,这没什么了不起的,但是你走了:

 <asp:Repeater id="quoteCascade" runat="server">
    <ItemTemplate>
    <blockquote>
        "<%#Container.DataItem("Quote")%>"
    <small>
        <%#Container.DataItem("SourceName")%><cite title="Source Title">
            <%#Container.DataItem("SourceTitle")%></cite></small>
    </blockquote>
    </ItemTemplate>
    </asp:Repeater>

那么这里出了什么问题?

编辑:我已经用工作代码更新了我的问题,下面是达米安乔的回答:

Sub randomQuote()
    Dim conn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    conn.Open()
    Dim cmd As New OleDbCommand("SELECT TOP 6 * FROM [FamousQuotes] ORDER BY rnd(INT(NOW*id)-NOW*id)", conn)
    quoteCascade.DataSource = cmd.ExecuteReader()
    quoteCascade.DataBind()
    conn.Close()
End Sub

1 个答案:

答案 0 :(得分:4)

您可以即时执行datareader,无需调用ExecuteNonQuery()

        quoteCascade.DataSource = cmd.ExecuteReader();
        quoteCascade.DataBind();            
        //Close your connection