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
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 4 juil. 2009 à 07:46
Bonjour,
en fait c'est la connexion qui est fermée lorsque tu essayes de lire le reader.
La méthode Execute reader ne charge pas le DataReader completement, mais garde une sorte de curseur sur la connexion, le fait de fermer la connexion va fermer le datareader.
comme tu positionnes "CommandBehavior.CloseConnection" sur l'execution, la connexion sera fermée lorsque tu fermeras le reader.
enleve donc "conn.Close()" de ton finally.
autre remarques:
-inutile de mettre un "ref" devant le parametre connexion, les objets sont par défaut passés par référence.
-enleve le conn.open avant de lire le reader, car la connexion est déjà ouverte dans la methode.
-la methode "Read" du data reader ne donne pas le nombre de ligne, mais fait avancer le pointeur de lecture
-à la fin de la lecture, ferme le datareader, la connexion va se fermer avec.
je ne sais pas ce que tu veux faire au final, mais si ta methode ExecuteReader se borne à faire l'ouverture de la connexion et l'execution de la commande, elle est inutile et rend le code complexe.