2013-02-21 91 views
0

我想从数据库检索数据。我可以连接到数据库并检索数据,但是当我尝试将其放入数据网格时,出现错误说明从数据库插入数据在数据网格在vb.net

索引超出范围异常未处理ORDERDETAILS.PRODUCTID。

SQL语句的作品,但不知道输入成一个数据网格的代码。任何帮助,将不胜感激。

Dim conn As New OleDb.OleDbConnection 
    conn.ConnectionString = _ 
    "Provider=msdaora;Data Source=orabis;User Id=112221739;Password=112221739;" 

    conn.Open() 


    Dim work As Integer 
    work = CInt(ComboBox1.SelectedItem) 

    Dim cmd As New OleDbCommand 


    cmd = conn.CreateCommand() 


    cmd.CommandText = "SELECT  ORDERDETAILS.PRODUCTID,PRODUCTS.PRODUCTDESCRIPTION,ORDERDETAILS.ORDERQUANTITY,ORDERDETAILS. ORDERQUANTITYTOTAL FROM CUSTOMER, ORDERS, ORDERDETAILS, PRODUCTS WHERE CUSTOMER.CUSTOMERID = ? AND CUSTOMER.CUSTOMERID = ORDERS.CUSTOMERID AND ORDERS.ORDERID = ORDERDETAILS.ORDERID AND ORDERDETAILS.PRODUCTID = PRODUCTS.PRODUCTID" 
    cmd.CommandType = CommandType.Text 

    cmd.Parameters.AddWithValue("?", work) 
    Dim dr As OleDb.OleDbDataReader 
    dr = cmd.ExecuteReader() 
    If dr.HasRows Then 
      DataGridView1.Rows.Add(CInt(dr.Item("ORDERDETAILS.PRODUCTID")),  CStr(dr.Item("PRODUCTS.PRODUCTDESCRIPTION")), CInt(dr.Item("ORDERDETAILS.ORDERQUANTITY")), CInt(dr.Item("ORDERDETAILS.ORDERQUANTITYTOTAL"))) 
    End If 
    dr.Close() 
    cmd.ExecuteNonQuery() 

回答

0

您需要在抓取值之前从数据读取器读取数据。

If dr.Read Then 
     DataGridView1.Rows.Add(CInt(dr.Item("ORDERDETAILS.PRODUCTID")),  CStr(dr.Item("PRODUCTS.PRODUCTDESCRIPTION")), CInt(dr.Item("ORDERDETAILS.ORDERQUANTITY")), CInt(dr.Item("ORDERDETAILS.ORDERQUANTITYTOTAL"))) 
End If 
+0

这是什么代码完整?我应该用dr.read来代替dr.HasRows ..?对不起,花了这么长的时间来回应。这是一个大学项目的一部分,只有机会再次憧憬它:-) – Dtoon 2013-02-23 18:48:52