2

Oracle DB からデータを読み取り、SMS で送信するソフトウェアを作成しましたが、キーボードの C キーを押したときに datareader の読み取りを停止したいのですが、これを実行すると、次の例外メッセージが表示されます。

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);
                }

ありがとうございました

4

1 に答える 1

0

reader.Close();を呼び出します。whileステートメントの後...

于 2012-10-17T07:03:34.873 に答える