Pregunta

Tengo un problema con una consulta de Oracle en una aplicación de Windows basada en .net 2.0.estoy usando System.Data.OracleClient para conectarse a la base de datos Oracle.El nombre de la base de datos es myDB.Debajo de la cadena de conexión que estoy usando:

Data Source=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST =  172.16.0.24)(PORT = 1522)))(CONNECT_DATA =(SERVICE_NAME = ORCL)));
User ID=myDB;Password=myDB;Unicode=True

Si ejecuto la siguiente consulta, obtendré un resultado incorrecto (aquí un resultado incorrecto significa datos incorrectos).Los datos no pertenecen a myDB):

SELECT ID, NAME  
FROM MyTempTable
WHERE ID IN (10780, 10760, 11890)

Pero si agrego el nombre de la base de datos junto con él, obtengo el resultado correcto:

SELECT ID, NAME
FROM "myDB".MyTempTable
WHERE ID IN (10780, 10760, 11890)

Mi limitación es que no puedo agregar el nombre de la base de datos ya que se trata de una aplicación genérica y se puede ejecutar con cualquier base de datos en tiempo de ejecución.Por favor ayuda.

¿Fue útil?

Solución

Esto parece un problema con la resolución de nombres. Intente crear un sinónimo público en la tabla:

CREAR SINÓNIMO PÚBLICO Mi tabla temporal para Mi tabla temporal;

Además, ¿qué quieres decir exactamente con resultado incorrecto, datos incorrectos, mensaje de error?


Editar:¿Cuál es el nombre del esquema al que pertenece la tabla requerida?Parece que la tabla desde la que intenta seleccionar está en un esquema diferente al que pertenece al usuario con el que se está conectando.

Otros consejos

Al conectarme al problema de la base de datos, soy

ALTER SESSION SET CURRENT_SCHEMA=abc;

donde abc es el usuario propietario de las tablas.

Para empezar, le sugeriría que utilice los proveedores de datos .net de Oracle, si es posible.Si está comenzando un proyecto, será la mejor manera de evitar dolores de cabeza en el futuro.Puedes obtenerlos de aquí

Para ampliar lo que ha dicho stjohnroe, parece que la razón por la que obtiene resultados diferentes es porque existen dos tablas diferentes con el mismo nombre en esquemas diferentes.
Al agregar el nombre de usuario myDB al principio de la consulta, ahora accede a la tabla con los datos que espera.(Ya que usted dice que los datos no pertenecen a "myDB", esto probablemente significa que la aplicación/procesamiento que está escribiendo los datos también está escribiendo en la tabla incorrecta).
La resolución es:
1.Si la tabla realmente no pertenece a "myDB", entonces suéltela para mantener el orden (ahora puede obtener errores 904 de tabla no encontrada cuando ejecuta su código)
2.Cree un sinónimo para el esquema y la tabla a los que realmente desea acceder (por ejemplo, CREAR SINÓNIMO myTable PARA aschema.myTable;)
3.No olvide otorgar derechos de acceso desde el esquema propietario de la tabla (por ejemplo:CONCEDER SELECCIONAR, INSERTAR, ELIMINAR EN myTable A myDB;(aquí myDB se refiere al usuario/esquema))

Intenta agregar

CONNECT_DATA=(SID=myDB)(SERVICE_NAME=ORCL)

en la cadena de conexión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top