正如標題所述,我目前正在嘗試將資料庫中的值存盤在串列中。在 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 連接,但是我已經更改了任何會沖突的變數名稱,我不知道這是否重要,但我覺得我會提到它。
非常感謝您在此問題上的任何和所有幫助,如果我需要提供其他資訊,我可以。
uj5u.com熱心網友回復:
您的主要問題是您實際上并沒有使用sdrEType閱讀器,而是您只是在使用dtEType尚未加載的資料表。目前尚不清楚為什么For回圈首先是必要的。
- 您應該使用多行字串,而不是 a
StringBuilder,這樣會更清晰。 - 這
Catch沒有任何意義,因為它會Throw ex擦除堆疊跟蹤,并且不會運行以下行。你應該洗掉它。如果你真的需要Catch,使用ThrownotThrow 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/490854.html
