Member 10453819 Ответов: 2

Не могли бы вы помочь мне с datatable


Я пытаюсь добавить строки в datatable by loop из sql server, но он выдает мне следующее сообщение: "в позиции 1 нет строки ".
он добавляет только первый элемент, а затем выбрасывает исключение.

Что я уже пробовал:

For i As Integer = 0 To getCount() - 1
    If InShift(Callsql.SqlDset.Tables(0).Rows(i)("e_ID")) = False Then
           Callsql2.RunQuery2("SELECT Job_Name FROM Jobs where Jo_ID ='" & Callsql.SqlDset.Tables(0).Rows(i)("Job_ID") & "' ")
           table2.Rows.Add(Callsql.SqlDset.Tables(0).Rows(i)("e_ID"), Callsql.SqlDset.Tables(0).Rows(i)("PC_ID"), Callsql.SqlDset.Tables(0).Rows(i)("e_Name").ToString(), Callsql.SqlDset.Tables(0).Rows(i)("e_LaName").ToString(), Callsql2.SqlDset.Tables(0).Rows(i)("Job_Name").ToString())
            DataGridView4.DataSource = table2
    End If
Next

Richard Deeming

Кроме того, ошибка кажется довольно очевидной: вы пытаетесь прочитать значение из строки в индексе 1, и этого ряда не существует.

Это почти наверняка ошибка в вашем getCount() метод. Но поскольку вы не показали нам ни кода для этого метода, ни кода, который заполняет Callsql.SqlDset Филд, мы не можем сказать вам, в чем проблема.

Member 10453819

Уважаемый господин,
код отлично работает, если я отображаю все элементы в текстовом поле, а не добавляю их в DATATABLE,это означает,что цикл, getCount() и Callsql.SqlDset не имели ошибок.
когда я сделал отладку, он правильно добавил первый элемент в DATATABLE и показал его в DataGridView4, а затем со вторым элементом. :
таблица2.Строк.Добавить(....)
бросьте исключение ."В позиции 1 нет строки"
спасибо.

2 Ответов

Рейтинг:
0

Maciej Los

Причина ваших неприятностей здесь:

DataGridView4.DataSource = table2

Например, команда перезагрузки DataSource для DataGridView4. Если вы используете его внутри for ...next петля, есть только один элемент, который был выбран и загружен этими строками:
Callsql2.RunQuery2("SELECT Job_Name FROM Jobs where Jo_ID ='" & Callsql.SqlDset.Tables(0).Rows(i)("Job_ID") & "' ")
table2.Rows.Add(...)

Переместите строку, которая используется для перезагрузки данных, за пределы цикла, и все должно быть в порядке.

Кстати: никогда не просите свою базу данных в цикле for! Это убивает производительность Sql Server, и это распространенная причина проблем!


Рейтинг:
0

Member 10453819

спасибо всем за помощь ..
Я узнаю, где был эрорр :

Callsql2.RunQuery2("SELECT Job_Name FROM Jobs where Jo_ID ='" & Callsql.SqlDset.Tables(0).Rows(i)("Job_ID") & "' ")


и я это исправляю