【发布时间】:2016-04-29 18:35:05
【问题描述】:
我正在制作一个 VB.NET (4.6) Windows 窗体应用程序,它收集我们服务器上的信息并允许我们对其进行报告。它很好地结合在一起,但我遇到了一个我无法弄清楚的问题。该项目的一部分是一项服务,该服务从 WSUS 查询有关可用 Windows 更新的信息,然后将它们存储在 SQL 数据库中——该部分工作正常。我现在尝试使用 SqlDataReader 在 DataGridView 中显示这些数据,以从数据库中查询信息并用响应填充 DataTable。问题是当我使用阅读器时,它会将相同的记录放入 DataTable 中两次。我不确定我做错了什么,而且我敢肯定这是非常简单的事情。也许你们中的一个人可以发现问题?
注意:在应用程序的早期,updateid 以唯一字符串的形式存储在名为 dbupdateidlist 的列表中,结果存储在名为 dbupTable 的 DataTable 中,而我尝试更新的 datagridview 名为 UpdateDeetsView。
Public Sub getUpdateDetails()
For Each str As String In dbupdateidlist
Dim commGetUpdateDetails As String = "select upTableId, title, classification, description, " +
"releasedate, severity, articlenumber, url from updatedetails where updateid = '" + str + "'"
Using connObj As New SqlClient.SqlConnection(connectionString)
Using cmdObj As New SqlClient.SqlCommand(commGetUpdateDetails, connObj)
connObj.Open()
Using readerObj As SqlClient.SqlDataReader = cmdObj.ExecuteReader
While readerObj.Read
dbuptabid = readerObj("uptableid")
dbuptitle = readerObj("title")
dbupclass = readerObj("classification")
dbupdesc = readerObj("description")
dbupreleasedate = readerObj("releasedate")
dbupseverity = readerObj("severity")
dbuparticlenumber = readerObj("articlenumber")
dbupurl = readerObj("url")
row = dbupTable.NewRow()
row("uptableid") = dbuptabid
row("title") = dbuptitle
row("classification") = dbupclass
row("description") = dbupdesc
row("releasedate") = dbupreleasedate
row("severity") = dbupseverity
row("articlenumber") = dbuparticlenumber
row("url") = dbupurl
dbupTable.Rows.Add(row)
End While
End Using
connObj.Close()
End Using
End Using
Next
UpdateDeetsView.DataSource = dbupTable
End Sub
请原谅可能很糟糕的代码,我是 SA 而不是开发人员...
【问题讨论】:
-
无需将行一一移动到数据表中。
dbupTable.Load(readerObj.ExecuteReader)将为您填写表格。如果您在其他地方有该表,则可以只使用它的 DataView。但无论如何,打开 Option Strict -
即使只是一个 SA,也要始终使用参数来避免 SQL 注入和格式问题。
-
dbupdateidlist是否包含重复值? -
这不是sql-server问题,请正确使用标签。
-
@Plutonix 感谢您的提示!但是,我用 dbupTable.Load(cmdObj.ExecuteReader) 替换了整个 While 循环,它仍然显示两个结果。 Option Strict 能为我做什么?
标签: vb.net sqldatareader