2013-07-30 3 views
0

Я пытаюсь выполнить итерацию через две таблицы данных, чтобы сравнить их с помощью вложенных циклов, но внешний цикл продолжает выходить из условной переменной.VB.NET-Итерация через таблицу данных, выходящую из связанной

query_strg = "my query" 
rs = New SqlCommand(query_strg, myconn) 
adap.SelectCommand = rs 
adap.Fill(dset) 
count = dset.Rows.Count 
For k = 0 To (count - 1) 
    For j = 0 To (dset1.Rows.Count - 1) 
    If (dset1.Rows(j)("name2").ToString() =dset.Rows(k)("name1").ToString() 
    OrElse (dset.Rows(k)("name2").ToString() = "General" 
    OrElse (dset.Rows(k)("name2").ToString() = "general" 
    OrElse (dset.Rows(k)("name2").ToString() = "Reports")))) Then 
      dset.Tables(0).Rows(k).Delete() 
      dset.Tables(0).AcceptChanges() 
      count = dset.Tables(0).Rows.Count 
     End If 
    Next j 
Next k 

Это мой код .... dset содержит только один столбец, а dset1 содержит 5 столбцов. Мне нужно сравнить один столбец в dset1 с dset, и если это необходимо, мне нужно удалить этот столбец, а также я выполнил другие сравнения, которые являются обязательными ....

Но проблема в том, что внешняя петля выходит из строя что приводит к одному из условий if, чтобы исключить исключение: «Нет строки, доступной в нет». что-то вроде этого.

Нужно знать, почему цикл for выходит из строя и если для него нет решения ... Мне нужно альтернативное представление для выполнения этого действия.

+1

Это может быть, что dset.Rows.Count возвращает значение, отличное dset.Tables (0) .Rows.Count. Попробуйте перейти от внешнего предела (для K = count - 1) и работать при удалении. – andrewb

+0

Вы хотите удалить столбец или строку? Можете ли вы опубликовать образцы данных и ожидаемые результаты –

+0

, счетчик возвращает точное значение ... И мне нужно удалить строки из одной таблицы, которая является dset, а dset1 не нуждается в каких-либо изменениях ...... – Vidhyasaghar

ответ

0

Попробуйте это ....

Dim dr, dr1 as DataRow 

count = dset.tables(0).Rows.Count 
For k = 0 To (count - 1) 
    If k > dset1.Tables(0).Rows.Count - 1 Then Exit For 

    dr = dset.tables(0).Rows(k) 
    For j = 0 To (dset1.Tables(0).Rows.Count - 1) 

     dr1 = dset1.tables(0).Rows(j) 
     If (dr1("name2").ToString() = dr("name1").ToString() 
     OrElse (UCase(dr("name2").ToString()) = "GENERAL"    
     OrElse (dr("name2").ToString() = "Reports")))) Then 
      dset.Tables(0).Rows(k).Delete() 
      dset.Tables(0).AcceptChanges() 
      count = dset.Tables(0).Rows.Count 

     End If 
    Next j 
Next k 
+0

Я не собираюсь для сравнения значений из разных столбцов ... Две таблицы имеют одинаковый столбец, но dset имеет только tat-столбец, а dset1 имеет 5 столбцов, но оба имеют столбец, который является «Имя компонента», это тот, который мне нужно сравнить .... и dset и dset1 может содержать различное количество строк ..... – Vidhyasaghar

+0

@ user2536944 .. Поэтому я изменил его на строки ... – matzone

+0

вот в чем проблема ... см. удаляемые строки, поэтому я думаю, что count во внешнем цикле будет не обновляться после изменений, поэтому цикл выдает исключение .... что делать там? – Vidhyasaghar

Смежные вопросы