Не могли бы вы помочь мне с 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
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Richard Deeming
Кроме того, ошибка кажется довольно очевидной: вы пытаетесь прочитать значение из строки в индексе 1
, и этого ряда не существует.
Это почти наверняка ошибка в вашем getCount()
метод. Но поскольку вы не показали нам ни кода для этого метода, ни кода, который заполняет Callsql.SqlDset
Филд, мы не можем сказать вам, в чем проблема.
Member 10453819
Уважаемый господин,
код отлично работает, если я отображаю все элементы в текстовом поле, а не добавляю их в DATATABLE,это означает,что цикл, getCount() и Callsql.SqlDset не имели ошибок.
когда я сделал отладку, он правильно добавил первый элемент в DATATABLE и показал его в DataGridView4, а затем со вторым элементом. :
таблица2.Строк.Добавить(....)
бросьте исключение ."В позиции 1 нет строки"
спасибо.