编辑
好的,所以在解决了一段时间之后,我想出了一个可行的解决方案,而且它比我最初想象的要干净。谢谢你们的帮助。这是代码。
Function Program_Search() As String()
'An ArrayList of Objects containing strings for each row.
'So the result is ArrayList(objRow1(strID, strPrograms), objRow2(strID, strPrograms).. etc)
Dim program_results As ArrayList = Get_Results("SELECT ID, Programs FROM tbMetrics ORDER BY ID ASC", strConnectionString)
'Initialize the list of programs. This will contian the tbMetrics Programs that match the selected Program name.
Dim programs As ArrayList = New ArrayList
'Loop through each row selected
For Each row As Object In program_results
'Not currently used.
Dim strID As String = row(0).ToString
'An integer representation of a binary number. Each digit represents a different program being checked.
Dim intPrograms As Integer = CInt(row(1).ToString)
'Convert number to binary string (reversed)
Dim strReversed As String = StrReverse(Convert.ToString(intPrograms, 2))
'Loop through each of the programs in the drop down box which should contain all of the possible choices in order.
For index As Integer = 0 To ddlPrograms.Items.Count - 1
'A bit of an ugly if state that checks for a 1 in the binary position for the selected program.
'Then if it's selected, it checks that the program matches the one selected by the user.
'Finally, it makes sure it doesn't add the same number to the array.
If (strReversed.Length - 1) >= index _
And strReversed(index) = "1" _
And ddlPrograms.SelectedValue.ToString = ddlPrograms.Items(index).Value.ToString _
And programs.Contains(intPrograms) = False Then
'If it passes all of the above checks, then finally add the program integer to the arraylist.
programs.Add(intPrograms)
End If
Next index
Next row
'Return the list of programs as an array, to be used with SQL IN().
Return programs.ToArray
End Function
结束编辑
原文如下
好的,所以我是一名 PHP 程序员,正在尝试学习一些 VB.NET。数组在 VB.NET 中让我非常困惑,所以我以我知道的方式用 PHP 编写了一些示例代码。如果有人能告诉我它在 VB.NET 中的正确工作方式,我将不胜感激。
<?php
function get_result() {
$result = query("SELECT id, value FROM test_table");
/*Returned as:
array(
array("id1", "value1"),
array("id2", "value2")...etc.
)*/
$haystack_top = array();
foreach ($result as $row) {
$id = $row[0]; //Not used currently
$value = $row[1];
for($i=0; $i <= $value; $i++) {
if (check_value($i)) {
$haystack_value = get_new_value($i);
$haystack_top[$value][] = $haystack_value;
}
}
}
$needle = get_needle();
$result = array();
foreach ($haystack_top as $value=>$haystack) {
if (in_array($needle, $haystack)) {
$result[] = $value;
}
}
return array_unique($result);
}
?>
这是我在 Vb.NET 中工作的一个较旧的、未完成的副本。它不是我真正需要的形式,因为我在构建 PHP 示例时更改了逻辑的工作方式,但它显示了我在使用数组时遇到的困惑在 VB.NET 中。
Function Program_Search() As String()
Dim program_results As Object = Get_Results("SELECT ID, Programs FROM tbMetrics ORDER BY ID ASC", strConnectionString)
'Create an array of strings to fill with potential field results.
Dim fields As List(Of String) = New List(Of String)()
For Each row As Object In program_results
Dim strID As String = row(0).ToString
Dim strPrograms As String = row(1).ToString
Dim intPrograms As Integer = CInt(strPrograms)
'Convert number to binary string (reversed)
Dim strReversed As String = StrReverse(Convert.ToString(intPrograms, 2))
For index As Integer = 0 To ddlPrograms.Items.Count - 1
If (strReversed.Length - 1) >= index Then
If strReversed(index) = "1" Then
fields.Add(ddlPrograms.Items(index).Value.ToString)
End If
End If
Next index
Next row
Dim programs As String() = fields.ToArray
Dim results As String()
If programs.Contains(ddlPrograms.SelectedValue.ToString) Then
End If
Return programs
End Function
因为有人对 Get_Results 函数感到好奇,所以这里是它的代码。
'Runs the passed query and returns each row as an object within an ArrayList
Function Get_Results(ByVal query As String, ByVal ConnectionStringName As String) As ArrayList
Dim sqlComm As Data.SqlClient.SqlCommand = Get_Connection(query, ConnectionStringName)
'Open that connection
sqlComm.Connection.Open()
'Execute the query and store all of the results into the SqlDataReader.
Dim sqlRead As Data.SqlClient.SqlDataReader = sqlComm.ExecuteReader()
Dim result As ArrayList = New ArrayList
'Read each row one by one.
While sqlRead.Read()
'Create an object of the size needed.
Dim row(sqlRead.FieldCount - 1) As Object
'Fill the row object with the values.
sqlRead.GetValues(row)
'Add the result object to the array.
result.Add(row)
End While
'Close all open connections to the database.
sqlRead.Close()
sqlComm.Connection.Close()
Return result
End Function