
Ejecución directa de comandos SQL en C#
Publicado por Hector (1 intervención) el 10/02/2016 16:46:10
Hola, tengo un problema en la ejecución de comandos SQL en forma directa desde C# con DataReader y es que cuando doy click en el botón button1 (único botón de un programa Winform de ejemplo) se ejecuta correctamente la linea:
Sin embargo, cuando se da click en button1 por segunda vez a fin de mostrar la segunda fila de la tabla, la instrucción anterior provoca la siguiente excepción:
---------------------------------------------------------------------------------------------------------------------------------------------------
Excepción no controlada del tipo 'System.InvalidOperationException' en System.Data.dll
Información adicional: Ya hay un DataReader abierto asociado a este Command, debe cerrarlo primero.
---------------------------------------------------------------------------------------------------------------------------------------------------
Y para mi esto no tiene ninguna lógica pues no deseo hacer el Close hasta tanto no haya leido todas las filas de la tabla.
A continuación te muestro el programita de ejemplo.
PROGRAMA DOCENTE DE EJEMPLO:
1
DATA_READER = COMANDO.ExecuteReader();
Sin embargo, cuando se da click en button1 por segunda vez a fin de mostrar la segunda fila de la tabla, la instrucción anterior provoca la siguiente excepción:
---------------------------------------------------------------------------------------------------------------------------------------------------
Excepción no controlada del tipo 'System.InvalidOperationException' en System.Data.dll
Información adicional: Ya hay un DataReader abierto asociado a este Command, debe cerrarlo primero.
---------------------------------------------------------------------------------------------------------------------------------------------------
Y para mi esto no tiene ninguna lógica pues no deseo hacer el Close hasta tanto no haya leido todas las filas de la tabla.
A continuación te muestro el programita de ejemplo.
PROGRAMA DOCENTE DE EJEMPLO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using LN;
using System.Data;
using System.Data.SqlClient;
namespace ComandosSQL
{
public partial class Form1 : Form
{
//-------------------------------------------------------------------------------------------------------------------------------------
// Instanciar un objeto de tipo LN para usar los métodos de dicha biblioteca (Objeto MensINFO)
LN.LN OBJ = new LN.LN(); // Uso de una biblioteca particular que no tiene que ver directamente con el tema
//-------------------------------------------------------------------------------------------------------------------------------------
// Aqui comienza el código asociado a la ejecución de comandos SQL dentro del programa
//-------------------------------------------------------------------------------------------------------------------------------------
SqlCommand COMANDO;
SqlDataReader DATA_READER;
public SqlConnection CONEXION =new SqlConnection(@"Data Source=PCHFC\SQLEXPRESS;Initial Catalog=SEGUROS;Persist Security Info=True;User ID=sa;Password=adivina");
//----------------------------------------------------
public Form1()
{
InitializeComponent();
// Al inicio del programa definimos el string del QUERY que vamos a usar y se abre la conexión (Open())
COMANDO = new SqlCommand(@"SELECT * FROM dbo.SEGUROS_DE_SALUD", CONEXION);
CONEXION.Open();
}
// Cada vez que se da click en el unico botón del formulario entramos en esta secuencia
private void button1_Click(object sender, EventArgs e)
{
DATA_READER = COMANDO.ExecuteReader(); <== Esta instrucción se ejecuta correctamente solo la 1ra vez
pues cuando se pasa por aqui la segunda vez se produce
la excepción. Porque sucede esto?
if (DATA_READER.Read())
{
OBJ.MensINFO(Convert.ToString(DATA_READER[0] + @" | " + DATA_READER[1]));
return;
}
CONEXION.Close();
Application.Exit();
}
}
}
Valora esta pregunta


0