2013-04-30 4 views
1

Я потратил слишком много времени на это сейчас, и я уверен, что я довольно близок к решению, но мне просто нужно «немного толкнуть» по краю.Связывание DataReader с ретранслятором ASP.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> 

Так что же происходит здесь не так?

EDIT: Я обновил свой вопрос с работающим кодом, ответ а-ля Дэмиена Джо ниже:

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 
+0

cmd.ExecuteNonQuery() не требуется, поскольку вы уже выполняете чтение позже. –

+0

Еще раз спасибо. Я отредактирую это. – adaam

ответ

3

Вы можете просто выполнить DataReader на лета, нет необходимости вызывать ExecuteNonQuery()

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

Большое спасибо! – adaam