ExecuteReader需要一个开放的连接 - 它已经*已打开*,为什么会发生这种情况?

时间:2014-08-31 08:13:36

标签: c# ms-access-2010

以下代码已成功用于应用程序的其他部分而没有错误。

但是,出于某种原因,在从Access数据库读取数据时会抛出InvalidOperationException。

下面的代码仅包含要点(不是试图阅读的项目,因为这会使可读性变得困难)。

为什么我会收到此错误,尽管事实上我打电话给" Open"我连接的方法?

代码如下:

string connString = "Provider= Microsoft.ACE.OLEDB.12.0;" + "Data Source= C:\\temp\\IntelliMed.accdb";
        string queryString = "SELECT patientID, firstName, lastName, patientGender, dateOfBirth, residentialAddress, postalAddress, nationalHealthNumber, telephoneNumber, cellphoneNumber, cscNumber FROM PatientRecord WHERE patientID = @patientID";

        try
        {
            using (OleDbConnection con = new OleDbConnection(connString))
            {
                con.Open();
                OleDbCommand command = new OleDbCommand();
                command.CommandText = queryString;
                command.Parameters.AddWithValue("@patientID", patientID);
                command.Connection = ctnPatientRecord;

                OleDbDataReader prescriptionDetailsReader = command.ExecuteReader();

                while (prescriptionDetailsReader.Read())
                {
                  //Read stuff.
                }
                //Close the reader.
               }
               //Close the connection.
             } //Method "closing" bracket.

感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您应该将命令与连接相关联

command.Connection = con;

或者更好的是使用CreateCommand方法而不是构造函数通过连接创建命令。