0

これが私のコードです。このエラーの原因がわかりません。エラー自体はコード行を指していましたDo While myReader.readが、それが問題の原因かどうかはわかりません。

より詳細なエラー メッセージは次のとおりです。

executereader: 接続プロパティが初期化されていません。system.data.oledb.oledbcommand.validateconnection (文字列メソッド) で system.data.oledb.oledbcommand.validateconnectionandtransaction (文字列メソッド) で

コード:

Imports System.Data.OleDb
Imports System.Data

Partial Class Customer_6_OrderHistory
    Inherits System.Web.UI.Page

    Private myDB As OleDbConnection
    Private sqlCmd As OleDbCommand
    Private myReader As OleDbDataReader
    Private myConnection As String = ConfigurationManager.ConnectionStrings("ConnString10").ToString
    Private myDataFile As String = ConfigurationSettings.AppSettings("DBFile")

    Private LegoNameList As New ArrayList
    Private ShipmentDateList As New ArrayList
    Private CostList As New ArrayList
    Private NumberPurchasedList As New ArrayList
    Private RecipientList As New ArrayList
    Private TotalCostList As New ArrayList

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

        myDB = New OleDbConnection(myConnection)

        sqlCmd = New OleDbCommand("exec qry_OrderHistory")
        sqlCmd.Parameters.AddWithValue("@CustomerName", Session("myCart").GetCustomerName())

        Try
            myDB.Open()
            myReader = sqlCmd.ExecuteReader
            Do While myReader.Read
                LegoNameList.Add(myReader("Lego Name"))
                ShipmentDateList.Add(myReader("Date"))
                CostList.Add(myReader("Cost"))
                NumberPurchasedList.Add(myReader("Number Purchased"))
                RecipientList.Add(myReader("Recipient"))
                TotalCostList.Add(myReader("Total Cost"))
            Loop
            myReader.Close()
        Catch ex As Exception
            MsgBox(ex.ToString)
        Finally
            myDB.Close()
        End Try

        Dim myDataTable As New DataTable
        myDataTable.Columns.Add("Lego Name")
        myDataTable.Columns.Add("Date")
        myDataTable.Columns.Add("Cost")
        myDataTable.Columns.Add("Number Purchased")
        myDataTable.Columns.Add("Recipient")
        myDataTable.Columns.Add("Total Cost")

        For i = 0 To LegoNameList.Count - 1
            Dim myRow As DataRow = myDataTable.NewRow
            myRow.Item("Lego Name") = LegoNameList.Item(i)
            myRow.Item("Date") = FormatDateTime(ShipmentDateList.Item(i), DateFormat.ShortDate)
            myRow.Item("Cost") = FormatCurrency(CostList.Item(i), 2, TriState.True, TriState.False, TriState.True)
            myRow.Item("Number Purchased") = NumberPurchasedList.Item(i)
            myRow.Item("Recipient") = RecipientList.Item(i)
            myRow.Item("Total Cost") = FormatCurrency(TotalCostList.Item(i), 2, TriState.True, TriState.False, TriState.True)
            myDataTable.Rows.Add(myRow)
        Next
        gvwOrderHistory.DataSource = myDataTable
        gvwOrderHistory.DataBind()
    End Sub
End Class
4

2 に答える 2

1

接続を作成してからコマンドを作成しましたが、接続をコマンドに割り当てていないため、エラーが発生しています。OleDbCommand次のように、接続を に割り当てることができます。

sqlCmd.Connection = myDB

OleDbCommandまたは、次のようにコンストラクターで指定することもできます。

sqlCmd = New OleDbCommand("exec qry_OrderHistory", myDB)

その後、接続を開いてコマンドを実行できます。

于 2013-03-24T05:58:12.843 に答える
0

Connective インスタンスmyConnectionを使用する前に初期化する必要があります

于 2013-03-24T05:56:08.887 に答える