Rechercher : dans
Par :

Ouvrir mon DataReader???

Dernière réponse le 12 jui 2009 à 17:35:08 SonOfGod7, le 3 jui 2009 à 23:30:09 
 Signaler ce message aux modérateurs

Bonjour,
Salut,
Voila j'ai un problème avec mon script,
Voici une methode de ma classe AccesData: cette methode me retourne un datareader.

public System.Data.Common.DbDataReader ExecuteReader(String CommandText, ref System.Data.Common.DbConnection conn)
{
System.Data.Common.DbCommand oDbCommand;
System.Data.Common.DbDataReader oDbDataReader;
try
{
conn.Open();
oDbCommand = this.CreateCommand(CommandText, conn, System.Data.CommandType.Text);

oDbDataReader = oDbCommand.ExecuteReader(System.Data.CommandBehavior.CloseCo­nnection);


}
catch (Exception ex)
{
throw ex;
}
finally
{
conn.Close();
}

return oDbDataReader;
}
Voici le code et voici mon Main

static void Main(string[] args)
{
AccesData obj;
obj = AccesData.GetInstance();
System.Data.Common.DbConnection conn;
conn = obj.CreateConnection("System.Data.SqlClient", "initial catalog=data; data source=.;integrated security=true;");
System.Data.Common.DbDataReader Da ;
Da = obj.ExecuteReader("select * from data",ref conn);
conn.Open();

Console.Write("Le nombre de ligne changer est {0}", Da.Read());
while (Da.Read())
{
Console.WriteLine("de numero {0} et de nom {1}", Da["id"], Da["name"]);
}
conn.Close();
Console.ReadLine();
}
voici les detail de mon erreur

L'exception System.InvalidOperationException n'a pas été gérée
Message="Tentative d'appel de Read non valide lorsque le lecteur est fermé."
Source="System.Data"
StackTrace:
à System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
à System.Data.SqlClient.SqlDataReader.Read()
à test.Program.Main(String[] args) dans D:\Boss\Script\projet été\C# - 2SF\test1\test1\Program.cs:ligne 173
à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
à System.Threading.ThreadHelper.ThreadStart()
InnerException:
c'est quoi le Lecteur es ce le dataset .
Si oui comment l'ouvrir , je n'ai rien trouvé sur le net

Configuration: Windows XP
Safari 530.5

Meilleures réponses pour « Ouvrir mon DataReader??? » dans :
Maîtrise d'ouvrage / Maîtrise d'oeuvre Voir Maîtrise d'oeuvre et maîtrise d'ouvrage Maître d'ouvrage On appelle maître d'ouvrage (parfois maîtrise d'ouvrage, notée MOA) l'entité porteuse du besoin, définissant l'objectif du projet, son calendrier et le budget consacré à ce projet. Le...
Ouverture d'un fichier Voir Ouverture d'un fichier existant crée avec le même logiciel Il existe fondamentalement deux méthodes pour ouvrir un fichier sous Windows : Choisissez dans le menu du logiciel concerné Fichier > Ouvrir et naviguez jusqu’au fichier concerné dans la...
Comment ouvrir un fichier PPS (présentation PowerPoint) ? Voir Comment lire un fichier PPS ? Les fichiers PPS sont des diaporamas crées avec le logiciel PowerPoint. Il s'agit simplement de fichiers PPT dont l'extension du nom de fichier a été modifiée en PPS. Il est possible de les ouvrir avec un des logiciels...
Ouvrir plusieurs sessions simultanément sous MSN/WLM VoirPar défaut, il n'est possible d'ouvrir qu'une seule session à la fois sous MSN Messenger ou Windows Live Messenger. Cependant, il est possible de modifier ce comportement et permettre ainsi l'ouverture et la connexion de plusieurs sessions en...
[Windows XP] Ouverture de session : se loguer automatiquement VoirMéthode manuelle Méthode simple Pour Windows 95/98/ME/NT/2000 Pour Windows XP/2003 Pour XP ou Vista Autologon v2.10 pour Windows NT/2000/XP Si vous êtes le seul utilisateur de l'ordinateur, peut-être en avez-vous assez d'ouvrir...
Ouvrir un fichier WPS VoirProblème Vous avez reçu par mail un fichier joint en wps, mais vous n'arrivez pas à l'ouvrir avec Word ou Open Office. Solution Il suffit de se rendre sur le site http://www.conv2pdf.com, qui permet de convertir les fichiers WPS en PDF. Merci...

1

kuchi007, le 4 jui 2009 à 14:05:06

Salut,

Alors vu que je ne sais pas où est situé exactement l'erreur et du fait que j'oublie les bases...
Je vois que deux raisons possibles.

Après ton conn.Close() dans ton main, l'instruction Console.ReadLine() est elle toujours valide malgré la fermeture de la connexion???

Sinon l'autre chose que j'ai vu et c'est là que mes bases ne sont plus solides, c'est dans ta méthode tu déclares localement la variable oDbDataReader et tu la renvois à la fin de la méthode puis dans ton main tu exécutes des fonctions sur l'objet retourné.

Je ne sais plus en Java mais en C++ je suis quasiment sur que la portée de la variable reste locale et n'est plus valide en dehors de la méthode donc que dans ton main la ligne Da.Read() est invalide.
Le garbage collector ne supprime-t-il pas la référence à oDbDataReader une fois sorti de la méthode???

Je ne suis plus sur mais visiblement l'erreur est causée par un appel à une méthode Read() et j'aurais tendance à dire que cela vient du Da.Read().

Enfin voilà essayes de voir et dis moi d'ailleurs où tu en es ça m'intéresse :)
Bonne chance

Répondre à kuchi007

2

SonOfGod7, le 11 jui 2009 à 08:28:11

Salut kuchi007, desolé de repondre si tard .
Au juste , pour regler ce probleme , c'est enlevé conn.Close(), de ma fonction ExecuteReade.
Car un Datareader fonctionne en mode deconnecté et dès que tu ferme la connection il se perd apparemment.

Donc je ferme la connection dans le main.

Répondre à SonOfGod7

3

 kuchi007, le 12 jui 2009 à 17:35:08

Ok merci bien donc c 'est bien une des choses que je trouvais bizarre ^^
Généralement lorsque tu fermes une connexion il est difficile de transmettre dessus ! :)

Répondre à kuchi007