Получение исключения из adsDataReader - PullRequest
2 голосов
/ 16 августа 2010

Я получаю следующее исключение.В таблице две записи, и HasRows = true

Advantage.Data.Provider.AdsException was unhandled by user code
  Message="Error 5018:  The handle given was not recognized by Advantage. Verify specified handle is open/active.  The given handle is not recognized as a valid Advantage Client Engine handle."
  Source="Advantage.Data.Provider"
  Number=5018
  State=""
  StackTrace:
       at Advantage.Data.Provider.AdsException.CheckACE(UInt32 ulRet)
       at Advantage.Data.Provider.AdsDataReader.GetName(Int32 iCol)
       at Ceridian.Benefits.AdvantageDbAdapter.Utilities.SelectBodyWriter.OnWriteBodyContents(XmlDictionaryWriter writer)
       at System.ServiceModel.Channels.BodyWriter.WriteBodyContents(XmlDictionaryWriter writer)
       at System.ServiceModel.Channels.BodyWriterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)
       at System.ServiceModel.Channels.Message.WriteBodyContents(XmlDictionaryWriter writer)
       at Ceridian.Benefits.AdvantageDbAdapter.Utilities.AdapterMessage.OnWriteBodyContents(XmlDictionaryWriter writer)
       at System.ServiceModel.Channels.Message.OnGetReaderAtBodyContents()
       at Ceridian.Benefits.AdvantageDbAdapter.Utilities.AdapterMessage.OnGetReaderAtBodyContents()
       at System.ServiceModel.Channels.Message.GetReaderAtBodyContents()
       at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
       at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters)
       at System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc& rpc)
       at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
  InnerException: 

1 Ответ

2 голосов
/ 17 августа 2010

Я обычно видел это, когда основное соединение было закрыто между получением считывателя и использованием считывателя. Если вы используете глобальное соединение, убедитесь, что оно не было закрыто где-то ранее.

Например, следующий блок кода получит ошибку 5018 при «чтении», поскольку соединение уже было закрыто.

        AdsConnection cn = new AdsConnection("data source=c:\\");
        cn.Open();
        AdsCommand cmd = cn.CreateCommand();
        cmd.CommandText = "EXECUTE PROCEDURE sp_mgGetInstallInfo()";
        AdsDataReader dr = cmd.ExecuteReader();
        cn.Close();
        dr.Read();

Если вы переместите cn.Close (); чтобы после прочтения вы не получили ошибку.

...