2012-05-04 6 views
5

que acaba de instalar una base de datos Oracle expreso y estoy tratando de leer algunos datos de una tabla que he puesto ahí:problemas de lectura de Oracle

using (OracleConnection conn = new OracleConnection("Data Source=localhost:1521/xe;Persist Security Info=True;User ID=SYSTEM;Password=SYSTEMPASSWORD")) 
{ 
    OracleCommand command = new OracleCommand("SELECT * FROM Persons WHERE Firstname = 'John'", conn); 
    conn.Open(); 
    OracleDataReader reader = command.ExecuteReader(); 

    try 
    { 
     while (reader.Read()) 
     { 
      string strResult = reader.GetString(0); 
     } 
    } 
    catch (OracleException oex) 
    { 
     MessageBox.Show(oex.Message, "Oracle error"); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error"); 
    } 
    finally 
    { 
     reader.Close(); 
    } 
} 

Por while (reader.Read()) que sólo se cierra ya que el lector hace no contiene ningún dato. ¿Qué está mal? Connectionstring? He ejecutado el mismo SELECT en la herramienta commandprompt que está instalada con Oracle Express y funciona bien.

+2

¿Estás seguro de que la conexión está abierta correctamente y ExecuteReader funciona sin excepciones? ¿Puso un punto de corte y un valor comprobado del objeto lector después de la asignación y antes de ingresar al ciclo while? –

+1

¿Esta selección devuelve cualquier fila si la ejecutará en sqlplus o en cualquier otra herramienta? – igofed

+0

Pruebe la selección sin la cláusula WHERE – Adauto

Respuesta

5

Lo primero que debe hacer cuando la conexión a cualquier sistema es ver/probar si ha tenido éxito y luego continuar. Sin estos simples tipos de pruebas, su aplicación se verá obligada a comportarse como una bomba de tiempo. Un poco de programación defensiva hará que tus proyectos sean mucho más fáciles de depurar. Realmente no es la respuesta que está buscando, pero actualmente el estado de la conexión no está claro en el momento de la ejecución de la consulta.

2

¿La tabla Personas está en el esquema del SISTEMA? Ejecuta otra consulta, como 'seleccionar object_name de user_objects' y danos actualizaciones con lo que has hecho.

+0

o simplemente ejecuta SELECT * FROM DUAL – igofed

1

Ha pasado mucho tiempo desde que no uso Oracle con .Net, pero no veo qué base de datos usa (¿es "xe"?). Con SQL Server, lo especifico con INITIAL CATALOG en la cadena de conexión. Aquí tiene diferentes cadenas de conexión para probar: http://www.connectionstrings.com/oracle. También comenzaría abriendo la conexión.

0

poco tarde a la fiesta, pero ...

que tenía el mismo problema para acceder a una vista y resultó que los privilegios adecuados no se les concedió en él. Una vez que otorgué el privilegio SELECT a mi ID de usuario pude obtener mis datos.

Cuestiones relacionadas