Error en CommandText

26/08/2003 - 11:36 por Juan Carlos Vázquez Bohabén | Informe spam
Hola a todos. Tengo un procedimiento que borra una tabla del usuario que
ejecuta la aplicación, si se encuentra en la BD. Para ello hago un select
count(*) por el nombre de esa tabla y me creo un DataReader. Dentro del
bucle while del DataReader, si existe la tabla, lo que quiero hacer es un
drop table. Para ello asigno esa sentencia al Command que utilice para hacer
el ExecuteReader(), pero me da un error. ¿Por que no puedo asignarle una
nueva sentencia al objeto Command y ejecutarla con ExecuteNonQuery()?.
¿Tengo que crear otro objeto Command y asignarle la misma conexión?.

Este es el procedimiento:
private void BorrarTabla(string nombreTabla)
{
OdbcConnection Cnnb = new OdbcConnection(CadConexion);
OdbcCommand Cmdb = new OdbcCommand();
Cnnb.Open();

OdbcTransaction Trans;
OdbcDataReader RDatos;
Trans = Cnnb.BeginTransaction();
Cmdb.Transaction = Trans;

try
{
string CadSQL = "select count(*) from iitables where table_name = '" +
nombreTabla + "' and table_owner = '" + Usuario + "'";

Cmdb.CommandType = CommandType.Text;
Cmdb.CommandText = CadSQL;
Cmdb.Connection = Cnnb;
RDatos = Cmdb.ExecuteReader();

while (RDatos.Read())
{
if (RDatos.GetInt16(0) == 1)
{
CadSQL = "drop table " + nombreTabla;

Cmdb.CommandText = CadSQL; <-- ME DA ERROR

long NTuplas;
NTuplas = Cmdb.ExecuteNonQuery();
}
}
// Cerrar el cursor
RDatos.Close();

//Finalizar la transación
Trans.Commit();
}
finally
{
Cnnb.Close();
}
}
 

Leer las respuestas

#1 Juan Carlos Vázquez Bohabén
27/08/2003 - 11:00 | Informe spam
Me lo suponía que era de eso. Pero mi pregunta ahora es ¿Como hago para
ejecutar un ExecuteNonQuery dentro de un bucle DataReader, dependiendo de
los datos que me devuelva este?. En VB6 se podía hacer con dos RecordSet
diferentes.

Gracias.

"Elph" escribió en el mensaje
news:%
Hash: SHA1

bueno no puedes hacerlo porque tienes el datareader abierto i en
uso.. eso impide q uses otra vez el mismo command hasta q lo hayas
cerrado.


"Juan Carlos Vázquez Bohabén" escribió en
el mensaje news:OTA$
> Hola a todos. Tengo un procedimiento que borra una tabla del
> usuario que ejecuta la aplicación, si se encuentra en la BD. Para
> ello hago un select count(*) por el nombre de esa tabla y me creo
> un DataReader. Dentro del bucle while del DataReader, si existe la
> tabla, lo que quiero hacer es un drop table. Para ello asigno esa
> sentencia al Command que utilice para hacer el ExecuteReader(),
> pero me da un error. ¿Por que no puedo asignarle una nueva
> sentencia al objeto Command y ejecutarla con ExecuteNonQuery()?.
> ¿Tengo que crear otro objeto Command y asignarle la misma
> conexión?.
>
> Este es el procedimiento:
> private void BorrarTabla(string nombreTabla)
> {
> OdbcConnection Cnnb = new OdbcConnection(CadConexion);
> OdbcCommand Cmdb = new OdbcCommand();
> Cnnb.Open();
>
> OdbcTransaction Trans;
> OdbcDataReader RDatos;
> Trans = Cnnb.BeginTransaction();
> Cmdb.Transaction = Trans;
>
> try
> {
> string CadSQL = "select count(*) from iitables where table_name
> = '" +
> nombreTabla + "' and table_owner = '" + Usuario + "'";
>
> Cmdb.CommandType = CommandType.Text;
> Cmdb.CommandText = CadSQL;
> Cmdb.Connection = Cnnb;
> RDatos = Cmdb.ExecuteReader();
>
> while (RDatos.Read())
> {
> if (RDatos.GetInt16(0) == 1)
> {
> CadSQL = "drop table " + nombreTabla;
>
> Cmdb.CommandText = CadSQL; <-- ME DA ERROR
>
> long NTuplas;
> NTuplas = Cmdb.ExecuteNonQuery();
> }
> }
> // Cerrar el cursor
> RDatos.Close();
>
> //Finalizar la transación
> Trans.Commit();
> }
> finally
> {
> Cnnb.Close();
> }
> }
>



Preguntas similares