0

データベースからデータを取得しようとしています。データベースに接続してデータを取得することはできますが、データグリッドに配置しようとすると、次のようなエラーが発生します。

範囲外のインデックスの例外は、未処理の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()
4

1 に答える 1

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
于 2013-02-21T17:14:19.370 に答える