2013-07-22 24 views
0
Dim count as Short = 10 
    Dim roll(count), absent(count), present(count) As Short 
    Dim i As Short = 1 
    query = "SELECT * FROM primary_student_table WHERE admityear=" & year & " AND batch= " & batch & "" 
    con.Open() 
    cmd = New SqlCommand(query, con) 
    re = cmd.ExecuteReader 
    While re.Read 
      roll(i) = re("roll") 
      i += 1 
    End While 
    con.Close() 

    absent = txtlist.Text.Split(","c).Select(Function(s) Short.Parse(s)).ToArray() 
    present = roll.Except(absent).ToArray() 
     MsgBox(absent(0)) 
     MsgBox(present(0)) 

逆向交集操作在上面的代碼中,在陣列中的值如下:與陣列vb.net

  • 輥= 21,22,23,24,25,26,27 ,

  • txtlist.text值= 28,29,30(類中的所有學生 的rollNos)21,22(意味着這兩個缺席爲類)

現在我需要正確保存陣列中的缺席輥不存在,並且在陣列輥本

的其餘部分的缺席列表獲取保存但第二MSGBOX正在顯示0,而不是23

代碼有什麼問題

+1

是'roll'真的是你認爲它是什麼?這是什麼回報:'String.Join(「,」,roll)'?當你不知道大小或者你必須添加/刪除集合中的項目時,你應該開始使用'List(Of T)'而不是數組。 –

+0

它只包含數字 –

+0

'Dim roll As New List(Of Short)While re.Read roll.Add(re(「roll」))i + = 1 End While'這是對的嗎? @TimSchmelter –

回答

4

VB.NET中的數組是從零開始的。要設置卷值從索引1開始:當你正在閱讀的DataReader的

Dim i As Short = 1 

然後,你裝入卷從數組索引1

'i is set to 1, so you're setting values from the second array item onwards 
While re.Read 
     roll(i) = re("roll") 
     i += 1 
End While 

這樣的值開始roll(0)始終爲0,並將其發送到當前數組。

從數據讀取器讀取數據時,您可能沒有收到索引超出範圍的異常,這是因爲您的數據讀取器返回了10行,並且您的roll數組可以保存11(roll(10)實際上是11的數組)。

設置I 0的值,它應該是罰款:

Dim i As Short = 0 

編輯: 按添Schmelter的忠告,你真的應該考慮使用,而不是數組列表(Of T)已。另外,請考慮使用參數化的SQL查詢。

+0

你可能想建議使用'List(Of T)'代替;-) –

+0

完成@TimSchmelter :) – Riv

0
Dim i As Short = 1 

本來應該

Dim i As Short = 0 

這解決了這個問題