指数超出范围。对于循环和数组

时间:2009-11-23 03:17:01

标签: .net vb.net arrays

我正在尝试创建两个数组,这些数组填充了数据库中两个表的一组字符串,然后进行比较。例如: 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

4 个答案:

答案 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中的其他所有内容一样。