2013-03-24 177 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

相关问题