Member 13174737 Ответов: 1

Index out of range exception - {"particular"}


У меня есть база данных SQL со следующими подробностями таблиц;

Билл Без Особого Цена За Единицу Измерения Сумма Налога Taxamount
2905 авиаперевозка 100.000 100 10000.000 0.000 0.000
2905 таможня 4500.00 1 0.000 4500.000 675.000
2906 ТГК 250.000 250.000 0.000 1 38.000
2906 XYZ 5000.00 1 5000.000 0.0000 0.0000

В оконной форме у меня есть текстовое поле с именем Tbblbillto.Текст для поиска bill no и Datagrid со следующим именем. когда я наберу Билл нет. в текстовом поле, как все данные можно собрать из таблицы данных базы данных sql против счета no и отобразить в datagrid ?? Пожалуйста, помогите, как это сделать. на самом деле я использую его для своей собственной работы и никогда не испытываю никакого программного обеспечения или не изучал.

Конкретная Цена Единичная Сумма Taxamount Tax

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

Private Sub Tbblbillto_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tbblbillto.TextChanged

      Dim Cmd As New SqlClient.SqlCommand
      Dim Con As New SqlClient.SqlConnection
      Dim Rd As SqlDataReader
      Con.ConnectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=dbase;Integrated Security=True;Pooling=False"
      Cmd.Connection = Con
      Con.Open()
      Cmd.CommandText = "Select * from Bill where BillNo = '" & Tbblbillto.Text & "'"
      Rd = Cmd.ExecuteReader
      Rd.Read()
      If Rd.HasRows Then
          Dtpblbilldate.Text = Rd.Item("BillDate")
          Dudblmode.Text = Rd.Item("Smode")
          Dudbltype.Text = Rd.Item("Stype")
          Lbcur.Text = Rd.Item("Curency")
          Tbbljobno.Text = Rd.Item("JOBNo")
          Dtpbljobdt.Text = Rd.Item("JobDate")
          Tbbillexr.Text = Rd.Item("ExRate")
          Tbblcrdit.Text = Rd.Item("CreditPeriod")
          Lbbillno.Text = Rd.Item("BillNoType")
          Tbbillcltid.Text = Rd.Item("ClientID")
          Tbblname.Text = Rd.Item("BillTo")
          Tbblmawb.Text = Rd.Item("MAWBBLNo")
          Dtblmawbdt.Text = Rd.Item("MAWBBLDate")
          Tbblhawb.Text = Rd.Item("HAWBBLNo")
          Dtblhawbdt.Text = Rd.Item("HAWBBLDate")
          Tbblorg.Text = Rd.Item("Origin")
          Tbblpol.Text = Rd.Item("POL")
          Tbbldst.Text = Rd.Item("Dest")
          Tbblpod.Text = Rd.Item("POD")
          Tbblpro.Text = Rd.Item("Products")
          Tbblinv.Text = Rd.Item("ShInvNo")
          Dtblinvdt.Text = Rd.Item("ShInvdt")
          Tbblqty.Text = Rd.Item("Qty")
          Tbblgwt.Text = Rd.Item("Gwt")
          Tbblcwt.Text = Rd.Item("Cwt")
          Tbblacof.Text = Rd.Item("Acof")
          Tbblcarrier.Text = Rd.Item("Carrier")
          Dudblfreight.Text = Rd.Item("Freight")
          Dudblterms.Text = Rd.Item("Incotrm")
          Cmd.CommandText = "Select BillNo from BillDetails Where BillNo = '" & Tbblbillto.Text & "'"
          Rd.Close()
          Rd = Cmd.ExecuteReader
          Rd.Read()
          If Rd.HasRows Then
              Dim Row As DataGridViewRow
              Dim I As Integer
              For I = 0 To Dgvbillsa.Rows.Count - 1
                  Row = Dgvbillsa.Rows(I)
                  Using SqlCommand As New SqlCommand
                      Row.Cells(0).Value = Rd.Item("Particular") (Error Here)
                      Row.Cells(1).Value = Rd.Item("Price")
                      Row.Cells(2).Value = Rd.Item("Unit")
                      Row.Cells(3).Value = Rd.Item("Amount")
                      Row.Cells(4).Value = Rd.Item("TaxAmount")
                      Row.Cells(5).Value = Rd.Item("Tax")
                  End Using
              Next
          End If

      ElseIf Len(Tbblbillto.Text) > 3 Then
          MsgBox("No Invoice Record Found", MsgBoxStyle.Critical, "MODIFY BILL")
          CmdEdit.Enabled = False
      End If

  End Sub

Richard MacCutchan

Int не содержит значения.

Member 13174737

Спасибо за ваш ответ. Не могли бы вы посоветовать, что мне делать, чтобы получить доступ ??

Afzaal Ahmad Zeeshan

Предоставьте ему значение; какое-то значение, которое можно использовать.

Значение должно быть неотрицательным и меньше длины контейнера. Пожалуйста, ознакомьтесь также с сообщением об ошибке. :-)

0x01AA

Особенно предварительный просмотр сообщения об ошибке

Ralf Meier

В основном все уже сказано Афзаалом.
Речь идет об этих 2-х кодовых строках :

Dim Int Как Целое Число
Строки = Dgvbillsa.Строк(Инт)

Строка, к которой вы хотите получить доступ, должна исходить от вас (откуда нам это знать?). Это число должно быть значением из Int ...

Afzaal Ahmad Zeeshan

Это означает, что вы пытаетесь получить доступ к элементу, который не существует; вы пытаетесь захватить 10-й элемент в последовательности из 5 элементов. Как ты можешь это делать? Просто вы не можете. :-)

Итак, правильно проверьте размер вашего массива, а затем получите объект оттуда. Технически вам потребуется проверить размер или длину переменной Dgvbillsa, чтобы проверить, будет ли Int работать.

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

Member 13174737

Уважаемый сэр, я в Dgvbillsa(практическое руководство) снимите флажок Разрешить добавление. когда я проверяю включить добавление одних данных, показывающих без ошибок, но как я могу получить другие данные с тем же счетом нет.

Member 13174737

Я надеюсь, что в моем вопросе есть недоразумение. я редактирую свой запрос. Спасибо

Richard MacCutchan

Вы только выбираете BillNo поле из элементов базы данных, поэтому вы не можете ссылаться ни на какие другие поля. Может быть, вам нужно потратить еще немного времени на изучение обоих VB.NET и SQL.

Member 13174737

выбраны и другие, но ошибка та же "Index out of range exception - {"particular"}"

УМК.Свойства commandtext = "выбрать [конкретное], [цена], [подразделение], [количество], [TaxAmount], [налог] из BillDetails где [BillNo] = '" &амп; Tbblbillto.Текст &"'"
РД.Рядом()
РД = ЦМД.Метода executereader
РД.Читать()
Если У РД. Есть Деньги, То
Тусклая Строка Как DataGridViewRow
Dim I Как Целое Число
Для I = 0 До Dgvbillsa.Строк.Количество-1
Строки = Dgvbillsa.Строк(Я)
С Помощью Sqlcommand Как Новый Sqlcommand, Который
Ряд.Ячейки (0). Value = Rd. Item ("[Particular]") (здесь ошибка)
Ряд.Ячейки (1). Value = Rd. Item("[Цена]")
Ряд.Ячейки (2). Value = Rd. Item("[Единица Измерения]")
Ряд.Ячейки (3). Value = Rd. Item ("[Сумма]")
Ряд.Ячейки (4). Value = Rd. Item("[TaxAmount]")
Ряд.Ячейки (5). Value = Rd. Item ("[Налог]")

Richard MacCutchan

Имя столбца: Particular нет [Particular].

1 Ответов

Рейтинг:
2

Patrice T

Dim Int As Integer
Row = Dgvbillsa.Rows(Int) (Here is Error)

Вы должны попытаться установить значение int перед его использованием.

Cmd.CommandText = "Select * from BillDetails Where BillNo = '" & Tbblbillto.Text & "'"


Еще одна ваша проблема.
Никогда не создавайте SQL-запрос путем конкатенации с пользовательскими вводами, он называется "SQL-инъекция", он опасен для вашей базы данных и подвержен ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользовательский ввод типа "Брайан О'Коннер" может привести к сбою вашего приложения, то это уязвимость SQL-инъекции.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]


Member 13174737

не могли бы вы помочь мне, как я могу установить значение int, я не знаю, как я могу это сделать. пожалуйста помочь