2015-08-28 5 views
0

Я не знаю, о чем идет ошибка. Когда я запускаю инструкцию SQL в SQL Server или в построителе запросов vb.net, я не получаю ошибки и получаю результаты. Но когда я запускаю его из моей vb.net коды, я получаю эту ошибку:IndexOutOfRangeException: имя_поля в SQL Server select statement

System.IndexOutOfRangeException:Invoice
at System.Data.ProvideBase.FieldNameLookup.GetORdrinal(String fieldName)
at Suste.mData.SqlClient.SqlDataReader.GetOrdnal(String name).... (more texts)

Это мой код:

Private Sub FillPulloutList(employee_id As Integer, transaction_date As Date) 
    Try 
     cnn.Open() 
     query = "SELECT invoice As 'Invoice', product_id As 'Product ID', quantity As 'Quantity', amount As 'Amount', transaction_date As 'Date', employee_id As 'Employee ID' FROM pullouts_tbl " & _ 
       "WHERE (transaction_date = @transaction_date) AND (employee_id = @employee_id)" 
     cmd.Parameters.AddWithValue("@_transaction_date", transaction_date) 
     cmd.Parameters.AddWithValue("@_employee_id", employee_id) 
     dr = cmd.ExecuteReader() 
     While dr.Read 
      PulloutListDGV.Rows.Add(dr("Invoice"), dr("Amount")) 
     End While 
    Catch ex As Exception 
     MessageBox.Show(ex.ToString) 
    Finally 
     cnn.Close() 
    End Try 
End Sub 

Я использовал этот код более ста раз в этой программе, что я создавая, но не получал никаких ошибок, кроме этого. Можете ли вы указать мне, что я здесь делаю неправильно? Благодарю.

Это мой стол, если это помогает

if not exists (select * from sys.tables where name = N'pullouts_tbl' and type = N'U') 
begin 
    create table pullouts_tbl 
    (
     tid int identity(1,1) not null, 
     transaction_date date not null, 
     invoice int not null, 
     product_id nchar(20) not null, 
     quantity int not null, 
     amount decimal(18,2) not null, 
     employee_id nchar(20) not null 

     constraint pullouts_tbl_tid_pk primary key clustered (tid) 
     constraint pullouts_tbl_invoice_fk 
      foreign key (invoice) references invoice_tbl(invoice), 
     constraint pullouts_tbl_product_id_fk 
      foreign key (product_id) references products_tbl(product_id), 
     constraint pullouts_tbl_employee_id_fk 
      foreign key (employee_id) references employees_tbl(employee_id) 
) 

ответ

1

Он смотрит на меня, как вопрос здесь:

PulloutListDGV.Rows.Add(dr("Invoice"), dr("Amount")) 

Один или оба из этих столбцов не может быть найден в наборе результатов. Я замечаю, что эти два столбца указаны в коде SQL, назначаемом переменной query, но вы никогда не назначаете этот SQL-код CommandText вашего SqlCommand. Предположительно, вы выполняете другой запрос. Это пример того, почему вы должны создать свой объект команды, где вы его используете.

+0

Спасибо. Я понял. Я забыл cmd = новый SQLCommand (query, cnn) – Ibanez1408

+0

Вы действительно должны использовать локальную переменную для этого, поэтому не было бы возможности совершить эту ошибку. Я бы предложил локальную переменную для подключения, если вам действительно не нужно использовать один и тот же объект соединения несколькими способами. – jmcilhinney

+0

Мне бы очень хотелось это сделать, но я не знаю, как его реализовать. Можете ли вы показать мне пример? – Ibanez1408