2013-03-24 112 views
0

這是我的代碼。我似乎無法弄清楚是什麼導致了這個錯誤。該錯誤本身指向Do While myReader.read代碼行,但我不確定那是什麼導致了問題。錯誤「ExecuteReader:連接屬性尚未初始化。」

這裏有一個更詳細的錯誤信息:

的ExecuteReader:連接屬性尚未初始化。在在system.data.oledb.oledbcommand.validateconnectionandtransaction system.data.oledb.oledbcommand.validateconnection(串法)(串法)

代碼:

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 
+3

你永遠不會分配你的連接到OleDBCommand,這就是爲什麼你會收到錯誤。嘗試類似於'sqlCmd.Connection = myDB'或'sqlCommand = New OleDbCommand(「exec qry_OrderHistory」,myDB)' – Tim 2013-03-24 05:54:16

+0

_Community_用戶將此問題帶回主頁,以便回答問題。您應該注意和/或接受有助於解決此問題的答案。 – Bugs 2017-03-27 11:21:14

回答

0

你必須初始化實例連體myConnection之前使用它

1

您已創建您的連接,然後您創建您的命令,但您永遠不會將連接分配給您的命令,這就是爲什麼你會收到錯誤。您可以連接分配給您的OleDbCommand,像這樣:

sqlCmd.Connection = myDB 

或者你可以在OleDbCommand構造函數中指定,像這樣:

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

然後你就可以打開連接並執行命令。

+0

非常感謝!我可以通過使用 'sqlCmd = New OleDbCommand(「exec qry_OrderHistory」,myDB)'來修復錯誤 – JStew 2013-03-24 14:49:56

相關問題