Как получить данные из представления - PullRequest
1 голос
/ 11 февраля 2020

У меня есть представление с именем EMP_DETAILS, которое выглядит как

CREATE OR REPLACE FORCE VIEW "ABC"."EMP_DETAILS" ("NAME",  "COUNTRY") AS 

  SELECT 
b.NAME,c.COUNTRY
FROM 
ABC.Emp a ,ABC.Emp_Bom b ,ABC.Emp_info c 
    where a.E_ID=b.ID and a.R_ID=c.NR order by 1 asc;

Я просто wi sh извлекаю строку из этого представления, и запрос для этого же выглядит как

Select * from EMP_DETAILS where NAME = 'xxx' and COUNTRY = 'xxx';  //Query works fine in Oracle SQL Developer

C# код для выполнения этого запроса выглядит как

        DataSet ds = null;
        OracleDataAdapter adapter = null;
        StringBuilder builder = new StringBuilder();
        builder.Append("SELECT * from EMP_DETAILS where NAME = :xx and COUNTRY = :xxx");

        command = new OracleCommand(builder.ToString());
        command.Parameters.Add("xx", name);
        command.Parameters.Add("xxx", country);
        string tablename = "EMP_DETAILS";

        using (OracleConnection oc = new OracleConnection(CONNECTIONSTRING))
        {
            try
            {
                adapter = new OracleDataAdapter();
                command.CommandType = CommandType.Text;
                command.Connection = oc;
                adapter.SelectCommand = command;
                ds = new DataSet();
                adapter.Fill(ds, tablename); //Code breaks here msg says **No table or view found**
            }
            catch(Exception ex)
            {
                if (ds != null)
                {
                    ds.Dispose();
                    ds = null;
                }
            }
            finally
            {
                if (oc != null)
                {
                    oc.Close();
                    oc.Dispose();
                }
            }
        }

Обнаружено, что эта ошибка обычно возникает, если вы пытались выполнить оператор SQL, который ссылается на таблицу или представление, которое либо не существует, к которому у вас нет доступа, либо принадлежит к другой схеме, и вы не указали в таблице имя схемы.

Я проверил все эти условия, но все еще не мог не решить проблему. Дайте мне знать, где я ошибаюсь.

Этот вопрос мне не помогает, поэтому не помечайте его как дубликат.

Обновление: Я пытался объединить view query с моим Select query, и это работает! Запрос выглядит как

select* from
(SELECT b.NAME, c.COUNTRY FROM 
ABC.Emp a ,ABC.Emp_Bom b ,ABC.Emp_info c 
where a.E_ID=b.ID and a.R_ID=c.NR order by 1 asc)
where NAME LIKE :xx and AREA LIKE :xxx

Дайте мне знать, почему он не работает, когда я создаю представление, а затем пытаюсь извлечь данные из представления.

...