2012-10-17 46 views
2

我已经创建了一个软件来从Oracle数据库读取数据通过短信发送它,但我想停止datareader读取时,当我敲键盘上的C键,但是当我这样做时,我得到这个异常消息:如何停止从读取oracledatareader

Operation is not valid due to the current state of the object 

堆栈跟踪:

at Oracle.DataAccess.Client.OracleDataReader.Read() 
    at Test_SMS_AT_Command.Program.OnTimer(Object obj, EventArgs args) 

,这我的代码:

oraCommand.ExecuteNonQuery(); 

       OracleDataAdapter oraDataAdapter = new OracleDataAdapter(oraCommand); 
       Oracle.DataAccess.Types.OracleRefCursor refCursor = (Oracle.DataAccess.Types.OracleRefCursor)oraParameter.Value; 
       OracleDataReader reader = refCursor.GetDataReader(); 
       while (reader.Read()) 
       { 
        if (cki.Key == ConsoleKey.C) 
        { 
         cancel();      

         if (reader != null) 
         { 
          reader.Close(); //Closed 
         } 

         break; 

        } 

        if (sms.sendSms(reader["MOBILE_NO"].ToString(), reader["TEXT"].ToString())) 
        { 
         Console.WriteLine("Message successfully sent to " + reader["MOBILE_NO"].ToString() + ": " + DateTime.Now); 
         setStatus(Convert.ToInt32(reader["GORANNET_SMS_ID"])); 
         writeToFile(reader["TEXT"] + " sent to " + reader["MOBILE_NO"] + " at: " + DateTime.Now); 
        } 
        else 
        { 
         Console.WriteLine("Message was not sent"); 
        } 
        System.Threading.Thread.Sleep(15000); 
       } 

谢谢你

回答

0

Call reader.Close();在声明之后...

+0

缺少Command对象上的连接吗? –

+0

不,我没有错过读者正在完美工作的任何事情,但是我想在键盘上的C键时阻止读者进一步阅读 – danarj