Ретранслятор ASP.NET WebForms не отображает все записи
Я работаю над устаревшим сайтом ASP.NET 2.0 Web Forms. По какой-то причине элемент управления DataReader не получает все записи, которые извлекаются запросом SQL. Я запускаю запрос в SQL Management Studio и возвращаются 3 записи. Я получаю только 2 записи, когда вручную перебираю DataReader, и только 2 записи отображаются, когда я привязываю данные к повторителю.
Код VB.NET:
sql = "SELECT tblImages.ImageID, tblProducts.ProductName FROM tblImages INNER JOIN tblProducts ON tblImages.ProductID = tblProducts.ProductID WHERE tblImages.ProductID = 725 ORDER BY tblImages.Main DESC, tblImages.ImageID ASC"
comm = New SqlCommand(sql, conn)
dr = comm.ExecuteReader()
If dr.Read() = True Then
rptGallery.DataSource = dr
rptGallery.DataBind()
End If
dr.Close()
conn.Close()
Повторитель разметки:
<asp:Repeater ID="rptGallery" runat="server">
<HeaderTemplate>
<div id="slider" class="flexslider">
<ul class="slides">
</HeaderTemplate>
<ItemTemplate>
<li>
<a href="getimage.aspx?id=<%# Eval("ImageID")%>&format=large" data-featherlight="image">
<img src="getimage.aspx?id=<%# Eval("ImageID")%>&format=medium" alt="<%# Eval("ProductName")%>" /></a>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</div>
</FooterTemplate>
</asp:Repeater>
Когда я выполняю ручную итерацию, как в приведенном ниже коде, я могу проверить переменную ic, и ее значение после итерации по записям в устройстве чтения данных равно 2, а должно быть 3.
If dr.Read() = True Then
Dim ic As Integer = 0
While dr.Read()
ic = ic + 1
End While
End If
1 ответ
Каждый звонок dr.Read()
продвигает курсор. Итак, вы пропускаете запись. Возможно, вместо чтения записей вы должны использовать DataTable? Просто используйте Load()
Функция, чтобы прочитать информацию из вашего устройства чтения данных, а затем связать ее с вашим ретранслятором.
Кроме того, вам нужно обернуть SqlConnection
в операторе using, чтобы убедиться, что он правильно расположен.
В C# это было бы так:
sql = "SELECT tblImages.ImageID, tblProducts.ProductName FROM tblImages INNER JOIN tblProducts ON tblImages.ProductID = tblProducts.ProductID WHERE tblImages.ProductID = 725 ORDER BY tblImages.Main DESC, tblImages.ImageID ASC";
DataTable dt = new DataTable();
using (SqlConnection conn = new SqlConnection("connectionstring"))
{
comm = new SqlCommand(sql, conn);
conn.Open();
dt.Load(comm.ExecuteReader());
}
rptGallery.DataSource = dt;
rptGallery.DataBind();
В VB.NET это было бы так (используется автоматический конвертер кода, так как я не являюсь VB-кодером)
sql = "SELECT tblImages.ImageID, tblProducts.ProductName FROM tblImages INNER JOIN tblProducts ON tblImages.ProductID = tblProducts.ProductID WHERE tblImages.ProductID = 725 ORDER BY tblImages.Main DESC, tblImages.ImageID ASC"
Dim dt As New DataTable()
Using conn As New SqlConnection("connectionstring")
comm = New SqlCommand(sql, conn)
conn.Open()
dt.Load(comm.ExecuteReader())
End Using
rptGallery.DataSource = dt
rptGallery.DataBind()