我有一个非常奇怪的问题。我正在创建一个网页,从数据库中检索链接列表并显示它们。我检索记录并将它们加载到对象列表中。但是,当我在后面遍历该列表时,我将显示重复的项目。显示数据库信息时显示重复的条目 - VB.Net ASP.Net
页以查看结果是http://myhacc.azurewebsites.net/testlinks.aspx
应该只有每个环节的1,正如你可以看到有各自的2。至于为什么我没有丝毫的意思。我已经完成了10次逻辑。
我正在使用在Microsoft Azure上运行的Microsoft SQL Server 网页也作为Web应用程序在Microsoft Azure上托管。
我检查了我的数据库,数据库中没有重复的条目。 的数据库的结构如下
表:myportal_lcat 字段:ID - 整数 字段:名称 - 文本
表:myportal_lhref 字段:CATID - 整数 字段:DNAME - 文本 字段: HREF - 文本
的代码如下
<%@ Page Title="" Language="VB" MasterPageFile="~/Main.master" %>
<script runat="server">
Private oCon As Data.SqlClient.SqlConnection
Private oCon2 As Data.SqlClient.SqlConnection
Private oCatCom As New Data.SqlClient.SqlCommand
Private oCatRead As Data.SqlClient.SqlDataReader
Private oItemCom As New Data.SqlClient.SqlCommand
Private oItemRead As Data.SqlClient.SqlDataReader
Private liLinks As New List(Of linkItem)
Private Sub Page_Load() Handles Me.Load
oCon = New Data.SqlClient.SqlConnection("Server=xxxx,1433;Database=xxxxx;User ID=xxxxxx;Password=xxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;")
oCon2 = New Data.SqlClient.SqlConnection("Server=xxxxxx,1433;Database=xxxx;User ID=xxxx;Password=xxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;")
oCon.Open()
oCon2.Open()
oCatCom.Connection = oCon
oCatCom.CommandText = "Select * From myportal_lcat"
oItemCom.Connection = oCon2
oItemCom.CommandText = "Select * From myportal_lhref"
oCatRead = oCatCom.ExecuteReader()
oItemRead = oItemCom.ExecuteReader()
Do While oItemRead.Read
liLinks.Add(New linkItem With {.CatID = oItemRead("catid"), .DName = oItemRead("dname"), .HREF = oItemRead("href")})
Loop
End Sub
Private Class linkItem
Private m_CatID As Integer
Private m_DName As String
Private m_HREF As String
Public Property CatID() As Integer
Get
CatID = m_CatID
End Get
Set(value As Integer)
m_CatID = value
End Set
End Property
Public Property DName() As String
Get
DName = m_DName
End Get
Set(value As String)
m_DName = value
End Set
End Property
Public Property HREF() As String
Get
HREF = m_HREF
End Get
Set(value As String)
m_HREF = value
End Set
End Property
End Class
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
My Portal - Test
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PageHeader" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="PageContent" Runat="Server">
<%Dim t As linkItem %>
<%Do While oCatRead.Read()%>
<section class="links">
<h2><%=oCatRead("name") %></h2>
<ul>
<%For each t In liLinks %>
<%If t.CatID = oCatRead("id") Then %>
<li><a href="<%=t.HREF %>"><%=t.DName %></a></li>
<%End If %>
<%Next %>
</ul>
</section>
<%Loop%>
</asp:Content>
您的页面加载运行多次?你将不得不从你的最后调试。我没有看到任何通常会导致加载两次的内容。 –
使用2个纪元来获取数据似乎有点浪费。从你的代码看来,你在ID列上加入了2个表。那么为什么不把它写成一个声明,并保护自己必须加入复杂循环表的麻烦...... – Jeroen
肖恩兰格 - 这是页面加载运行两次的问题。我不知道为什么它应该运行两次,但它是。我将声明的初始化从声明移到了do循环之上,并解决了问题。 – Velocibadgery