我正在尝试创建两个数组,这些数组填充了数据库中两个表的一组字符串,然后进行比较。例如:
array1[0]="1101"
和
array2[0]="0110"
如果两个字符都等于1,则执行操作。但是,当我运行此代码时,我收到错误:索引超出了数组的范围。 System.IndexOutOfRangeException。
出于某种原因,我认为问题领域有以下两个陈述:
comparestringa = userintarray(x)
和
comparestringb = eventintarray(x)
当我发表评论时,错误不会显示。
myconnect = New SqlConnection("xxxx")
Dim Table1 As New SqlCommand("SELECT * FROM Table1", myconnect)
Dim Table2 As New SqlCommand("SELECT * FROM Table2", myconnect)
Dim array1 As New ArrayList
Dim array2 As New ArrayList
Table1.Connection.Open()
Dim r As SqlDataReader
r = Table1.ExecuteReader(CommandBehavior.CloseConnection)
While r.Read
array1.Add(r(1).ToString())
array1.Add(r(2).ToString())
array1.Add(r(3).ToString())
array1.Add(r(4).ToString())
End While
r.Close()
myconnect.Close()
Table2.Connection.Open()
Dim r2 As SqlDataReader
r2 = Table2.ExecuteReader(CommandBehavior.CloseConnection)
While r2.Read
array2.Add(r2(1).ToString())
array2.Add(r2(2).ToString())
array2.Add(r2(3).ToString())
array2.Add(r2(4).ToString())
End While
r2.Close()
myconnect.Close()
Dim comparestringa, comparestringb As String
Dim compare_string_counter As Int16 = 1
comparestringa = userintarray(0)
comparestringb = eventintarray(0)
For x = 0 To array1.Count - 1
If comparestringa(x) = "1" And comparestringa(x) = comparestringb(x) Then
Label4.Text = Label4.Text + " 1 "
Else
compare_string_counter = compare_string_counter + 1
End If
comparestringa = userintarray(x)
comparestringb = eventintarray(x)
Next
答案 0 :(得分:1)
未声明userintarray和eventintarray(至少不在您发布的代码中。)显然,它们的尺寸太小,或者根本没有尺寸。
答案 1 :(得分:0)
你的
userintarray(x)
eventintarray(x)
未在您的代码段中定义。您可以在使用之前检查是否在它们上分配了足够的数组项?
答案 2 :(得分:0)
循环遍历数组的代码只有一个索引变量,并将其用于两个数组。鉴于索引超出范围错误,我怀疑数组不包含相同数量的项目。由于索引基于array1,因此array2可能较小,因此索引无效。
答案 3 :(得分:0)
假设你的“select * from x”(真的,填写列名!)返回4个值,你将不得不这样做:
array1.Add(r(0).ToString())
array1.Add(r(1).ToString())
array1.Add(r(2).ToString())
array1.Add(r(3).ToString())
datareader从0位开始,就像dotnet中的其他所有内容一样。