Re: Alcanse de variable

Alberto León <[email protected]> Sun, 7 Mar 2010 04:21:25 +0100
Newsgroups gmane.comp.gnome.mono.hispano
Message-ID <[email protected]>
En principio la forma en que has declarado el DataReader sería útil en el
caso de que se utilizara fuera del Try posteriormente o se reusara. Pero por
desgracia los DataReaders una vez se consumen dan mucho problemas y es mejor
instanciar nuevos DataReaders. Principalmente porque suele aparecer el
mensaje "another DataReader is used by connection" o algo así.

El ciclo de vida de un DataReader termina cuando lo recorres o le haces un
bind. De hecho los bind directamente le llaman a Dispose al recorrerlo. Y en
un while al terminarlo te lo deja en EOF.

Así que el ámbito de tu DataReader se queda dentro del Try, no tiene sentido
k lo declares primero a nulo y después le asignes el valor devuelto por el
comando.



2010/3/7 Martin Ibarra <[email protected]>

>
> Saludos Alberto,
> al parecer el problema estaba en que no esta asignado a null
>
> Aqui la respuesta del canal de #mono en irc.gnome.net
>
> <macsharp> you could assign dr to null when it is declared
> <macsharp> your exact problem is that before "dr = cmd.ExecuteReader()"
> happens an exception could be thrown
> <macsharp> and caught by your "catch (Exception e)" which catches *all*
> exceptions
>
> tu codigo tambien trabaja ahora solo ver cual usare o cual me aparendere ,
> saludos. y gracias por sus prontas respuestas.
>
>
>
> 2010/3/6 Alberto León <[email protected]>
>
> Este es el código correcto:
>>
>>
>> public NpgsqlDataReader getUserList()
>>         {
>>             string sql = "select nombre,usuario,estatus from ch_usuario";
>>             ArrayList al = new ArrayList();
>>
>>            try{
>>
>>                 NpgsqlConnection conn = new NpgsqlConnection(Util.CONN);
>>                 conn.Open();
>>
>>                 NpgsqlCommand cmd = new NpgsqlCommand(sql,conn);
>>                 NpgsqlDataReader dr = cmd.ExecuteReader();
>>
>>             }catch(Exception e){
>>                 Util u = new Util();
>>                 u.WinInfo("Error al Cargar la lista de usuarios " +
>> e.Message.ToString(), "Error");
>>             }
>>             return dr;
>>         }
>>
>> 2010/3/7 Martin Ibarra <[email protected]>
>>
>>>  Que tal monos, trabajando con Postgres SQL y mono me a causado interes
>>> este codigo que no se puede ejcutar.
>>>
>>>
>>>
>>>
>>> public NpgsqlDataReader getUserList()
>>>         {
>>>             string sql = "select nombre,usuario,estatus from ch_usuario";
>>>             ArrayList al = new ArrayList();
>>>             NpgsqlDataReader dr;
>>>            try{
>>>
>>>                 NpgsqlConnection conn = new NpgsqlConnection(Util.CONN);
>>>                 conn.Open();
>>>
>>>                 NpgsqlCommand cmd = new NpgsqlCommand(sql,conn);
>>>                 dr = cmd.ExecuteReader();
>>>
>>>             }catch(Exception e){
>>>                 Util u = new Util();
>>>                 u.WinInfo("Error al Cargar la lista de usuarios " +
>>> e.Message.ToString(), "Error");
>>>             }
>>>             return dr;
>>>         }
>>>
>>>
>>> y me lanza este error :
>>>
>>> Use of unassigned local variable `dr'(CS0165)]
>>>
>>> y si le quito el try {} catch {} trabaja bien, se supone que try{  }
>>> catch{} no restringen el alcanse de variables o si ?
>>>
>>> _______________________________________________
>>> Mono-hispano mailing list
>>> [email protected]
>>> https://listas.hispalinux.es/mailman/listinfo/mono-hispano
>>>
>>
>>
>

_______________________________________________
Mono-hispano mailing list
[email protected]
https://listas.hispalinux.es/mailman/listinfo/mono-hispano