在VB.NET的列表中存储我的数据库中的值有麻烦



正如标题所述,我目前正试图将数据库中的值存储在列表中。在SSMS中,我已经验证了我的查询拉我需要的数据,但是当涉及到vb.net并将这些值放入列表时,它似乎是失败的。下面我已经复制了我目前正在使用的代码。

Try
Dim sb As New StringBuilder
With sb
.Append("SELECT TypeID FROM EnrollmentType AS a ")
.Append("INNER JOIN Enrollment AS e ON a.TypeDescription = e.EnrollmentType ")
.Append("WHERE AccountNumber = @AccountNumber")
End With
Using connEType As New SqlConnection(ConfigurationManager.ConnectionStrings("Blah").ToString)
Using cmdEType As New SqlCommand(sb.ToString, connEType)
cmdEType.Parameters.AddWithValue("@AccountNumber", strgAccountNum)
connEType.Open()
Using sdrEType As SqlDataReader = cmdEType.ExecuteReader
If sdrEType.HasRows Then
While sdrEType.Read
For i = 0 To dtEType.Rows.Count - 1
listEType.Add(dtEType.Rows(i).Item("TypeID"))
Next
End While
End If
End Using
connEType.Close()
End Using
End Using
lblSKUDescription.Text = dtEType.Rows.Count
Catch ex As Exception
Throw ex
lblSKUDescription.Text = "Oops"
End Try

即使在SSMS我的查询工作,这里没有添加到列表中,我的数据表没有数据行。这段代码目前处于页面加载事件中,因为我想要尽快填充这个列表,我不知道这是否重要。我还会注意到,在页面加载事件中还有另一个sql连接,但是我已经更改了任何可能冲突的变量名称,我不知道这是否重要,但我觉得我会提到它。

如果我需要提供更多的信息,我可以。

您的主要问题是您实际上没有使用sdrEType阅读器,相反,您只是使用尚未加载的dtEType数据表。目前尚不清楚为什么需要For循环。

  • 您应该使用多行字符串,而不是StringBuilder,这样更清楚。
  • Catch没有意义,因为Throw ex擦除堆栈跟踪,并且不运行下面的行。你应该把它去掉。如果你真的需要Catch,使用Throw而不是Throw ex
  • If sdrEType.HasRows是不必要的,While会解决的。
  • connEType.Close()是不必要的,Using会做。
  • 明确指定参数类型和长度
  • 用表别名/前缀限定SQL中的每个列。
Dim query As String = "
SELECT a.TypeID
FROM EnrollmentType AS a
INNER JOIN Enrollment AS e ON a.TypeDescription = e.EnrollmentType
WHERE e.AccountNumber = @AccountNumber;
"
Using connEType As New SqlConnection(ConfigurationManager.ConnectionStrings("Blah").ToString)
Using cmdEType As New SqlCommand(query, connEType)
cmdEType.Parameters.Add("@AccountNumber", SqlDbType.VarChar, 100).Value = strgAccountNum
connEType.Open()
Using sdrEType As SqlDataReader = cmdEType.ExecuteReader
While sdrEType.Read
listEType.Add(sdrEType("TypeID"))
End While
End Using
End Using
End Using
lblSKUDescription.Text = dtEType.Rows.Count

最新更新