我的程序中有以下代码,我在SQLCe数据库中将结果附加到列表中。该部分有效,但不是退出函数' QueryDB'它转到else语句并再次运行该函数,它将返回一个空值。我设计它是这样的,因为我想检查以确保数据库在我尝试执行SQL语句之前是打开的,如果它没有打开,请调用方法打开它并再次运行该函数。 / p>
Public Function QueryDB(ByVal strSQL As String) As List(Of String)
Dim reader As SqlCeDataReader
Dim results As New List(Of String)
Using cmdAdd As New SqlCeCommand(strSQL, conn)
If Me.checkConnection Then
reader = cmdAdd.ExecuteReader()
Do While reader.Read
results.Add(reader.GetString(0))
Loop
Return results
Exit Function
Else
connectPlansdb()
QueryDB(strSQL) 'does not exit function when done and goes through the function again
End If
End Using
End Function
我遇到的第二个问题是当我尝试将列表填充到表单类的组合框中时,我调用数据库并使用返回的列表填充我的组合框。我似乎无法弄清楚如何获取代码来处理列表。
Private Sub cmbInvestmentStrategy_DropDown(sender As System.Object, e As System.EventArgs) Handles cmbInvestmentStrategy.DropDown
Dim strat As New clsInvestmentStrategies()
Dim invStrat As New List(Of String)
invStrat = strat.getInvestmentStrategies() 'String cannot be converted to List(pf String)
cmbInvestmentStrategy.Items.Add(invStrat) 'Error 3 Value of type 'System.Collections.Generic.List(Of String)' _
'cannot be converted to '1-dimensional array of Object'.
End Sub
非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
您的QueryDB方法有一个很大的缺陷。如果数据库不可用(连接问题,数据库脱机或连接字符串错误),则会出现无限循环。您的查询DB方法应该只查询数据库。您可以将其包装在负责连接到数据库的另一个方法中,但您不希望无限地重试数据库连接。
至于你的第二种方法:
invStrat = strat.getInvestmentStrategies() 'String cannot be converted to List(Of String)
这里的错误很明显。 getInvestementStrategies返回单个String,无法转换为列表。它应该返回一个List(Of String),或者至少是一些字符串集合,我想?
cmbInvestmentStrategy.Items.Add(invStrat) 'Error 3 Value of type 'System.Collections.Generic.List(Of String)' _
'cannot be converted to '1-dimensional array of Object'.
Items.Add
会在组合框中添加一个元素。您应该遍历invStrat值,并为每个项目调用Add。或者,您可以使用AddRange方法,但此方法需要一个数组,而不是List。