2010-08-16 5 views
1

Je reçois l'exception suivante. Il y a deux enregistrements de la table et HasRows = trueObtention d'une exception à partir de adsDataReader

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: 

Répondre

2

J'ai généralement vu quand a fermé la connexion sous-jacente entre le lecteur et obtenir en utilisant le lecteur. Si vous utilisez une connexion globale, vérifiez qu'elle n'a pas été fermée quelque part plus tôt.

Par exemple, le bloc de code suivant recevra l'erreur 5018 sur la "lecture" puisque la connexion était déjà fermée.

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

Si vous déplacez le cn.Close(); après la lecture, vous ne devriez pas avoir l'erreur.

Questions connexes