【发布时间】:2019-06-08 12:11:27
【问题描述】:
实际上我是 ASPX 和 VB.net 的新手,我正在尝试在表格中为特定用户显示某些项目,所以首先我检查并将用户购买的“软件”放入列表中在数据库中看起来像这样:
table_username: User1 table_codesoftware: VP or table_username: User2 table_codesoftware: VP and table_username User2 table_codesoftware VPO。
因此,当用户 2 有权访问软件 VP 和 VPO 时,用户 1 只能访问数据库中具有 VP 作为软件代码的软件。
但是当我尝试为 User2 显示项目时,它会显示两倍于代码 VP 的软件。
这是我的 VB.NET 代码,其中我有一个 SELECT,其中 aggiornamenti 是所有软件的表,dat("codesw_cs") 是可供用户软件使用的列表。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim result As New ArrayList()
Dim table As New StringBuilder()
Dim SQL As String = "SELECT codesw_cs FROM clienti_sw WHERE nomeutente_cs = '" + Context.User.Identity.Name + "'"
Dim SQLConnect As String = ConfigurationManager.ConnectionStrings("myConnectionString").ConnectionString
Dim con As New MySqlConnection(SQLConnect)
Dim reader As MySqlDataReader
Dim cmd = New MySqlCommand(SQL, con)
Try
table = New StringBuilder()
con.Open()
reader = cmd.ExecuteReader()
While reader.Read()
Dim dict As New Dictionary(Of String, Object)
For count As Integer = 0 To (reader.FieldCount - 1)
dict.Add(reader.GetName(count), reader(count))
Next
result.Add(dict)
End While
reader.Close()
con.Close()
Catch ex As Exception
MsgBox("Can't load Web page" & vbCrLf & ex.Message)
End Try
For Each dat As Dictionary(Of String, Object) In result
con.Open()
Dim msd = New MySqlCommand("SELECT * FROM aggiornamenti WHERE softcode_ag = '" + dat("codesw_cs") + "'", con)
reader = msd.ExecuteReader()
While reader.Read()
table.Append("<tr>")
table.Append("<td>").Append(reader.GetString("nomesoftware_ag")).Append("</td>")
table.Append("<td>").Append(reader.GetString("version_ag")).Append("</td>")
table.Append("<td>").Append(Date.Parse(reader.GetString("releasedata_ag")).ToShortDateString).Append("</td>")
table.Append("<td>").Append("<a href=""" + reader.GetString("download_ag") + """ aria-disabled=""true"">Download</a></td>")
table.Append("</tr>")
End While
placeholder.Controls.Add(New LiteralControl(table.ToString))
reader.Close()
con.Close()
Next
End Sub
【问题讨论】:
-
可能会发生一些事情。查询是否返回重复?您是否正确清除表变量? For Each 循环可以创建重复条目吗?你可以通过设置断点来解决。现在,在 For Each 的第二个循环中,“table”变量仍将包含前一个循环的值。
-
@the_lotus 实际上我还没有进行调试,关键是在第一个 dat("codesw_cs") 是副总裁,而在它添加正确的项目时,甚至在第二个对于循环,dat 值是 VPO,它只为 VPO 添加项目并从 for 中退出,所以我无法找到它的重复位置..
-
@the_lotus 我刚刚从 Page_load 添加了整个代码
-
将“table = New StringBuilder()”放入For Each
-
除非您要求,否则变量不会自行清理。