【问题标题】:Duplicate Entries Displayed when Displaying Database information - VB.Net ASP.Net显示数据库信息时显示重复条目 - VB.Net ASP.Net
【发布时间】:2016-06-17 09:15:44
【问题描述】:

我遇到了一个非常奇怪的问题。我正在创建一个网页,该网页从数据库中检索链接列表并显示它们。我检索记录并将它们加载到对象列表中。但是,当我稍后遍历该列表时,会显示重复的项目。

查看结果的页面是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个qeuries获取数据似乎有点浪费。从您的代码看来,您在 id 列上加入了 2 个表。那么为什么不把它写成一个语句,让自己免于用复杂的循环连接表的麻烦......
  • Sean Lange - 这是页面加载运行两次的问题。我不知道为什么它应该运行两次,但确实如此。我将列表的初始化从声明移到了 do 循环的上方,从而解决了问题。
  • 杰罗恩。如果信息都在一个记录集中,我不太确定如何显示这些信息。所以我想简单的答案是我不知道怎么做。然而,由于这只是一个个人页面,没有高流量,额外查询的资源成本将非常低,因此浪费是可以接受的。

标签: sql asp.net sql-server vb.net duplicates


【解决方案1】:

问题是由于使用 asp.net masterpages 时 page_load 首先在 masterpage 中调用,然后在实际页面中再次调用。但是,两者的代码都运行了两次。

当我在页面加载的列表中添加项目时,我在声明中初始化对象列表时,它添加了两次,因为 page_load 运行了两次。我将对象列表的初始化移动到 page_load 而不是声明中,这解决了我的问题。

参考:Page_Load is firing twice in ASP.NET page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多