ODP.net + VB = Таблица не найдена - PullRequest
0 голосов
/ 26 апреля 2011

Я новичок в Oracle, и я только что установил Oracle 10g XE и его пакет ODAC для .NET. Я делаю простое приложение для подключения и получения таблиц в VB, однако оно всегда выдает ошибку «Таблица не найдена».

Я создал таблицу «Test» в Oracle Home (для веб-администратора), и вот код, который я использую в VB:

    Dim oraCmd As New OracleCommand("Select * From Test")
    oraCmd.Connection = oraCon

    oraCon.Open()

    oraCmd.ExecuteReader()
    'Reader code supressed

РЕДАКТИРОВАТЬ Когда я пытаюсь выполнить тот же запрос в Database Home, он работает.

1 Ответ

0 голосов
/ 27 апреля 2011

Если вы входите в систему, используя другого пользователя в oracle, и хотите читать из таблицы другого пользователя, вам следует полностью указать имя таблицы. Если ваша таблица создана под пользователем с именем «TEST_USER», то запросите вашу таблицу как «Select * From TEST_USER.test»

Это работает для меня, когда вы вошли в систему под тем же именем пользователя, из которого была создана таблица:

    private const string connString = "DATA SOURCE=//server:port/service_name;PASSWORD=pswd;USER ID=user_name;";

    static void Main(string[] args)
    {
        OracleConnection conn = new OracleConnection(connString);
        conn.Open();

        OracleCommand cmd = new OracleCommand("select * from test", conn);

        // This would also work if the username I used to login was "TEST_USER".
        // OracleCommand cmd = new OracleCommand("select * from TEST_USER.test", conn);

        cmd.ExecuteReader();

        conn.Close();
    }

Другая возможная проблема заключается в том, что вы назвали вашу таблицу строчными буквами как «Тест», вместо того, чтобы она называлась «ТЕСТ» в базе данных. В этом случае вам нужно сослаться на таблицу с кавычками вокруг нее:

    static void Main(string[] args)
    {
        OracleConnection conn = new OracleConnection(connString);
        conn.Open();

        OracleCommand cmd = new OracleCommand("select * from \"Test\"", conn);
        cmd.ExecuteReader();

        conn.Close();
    }

Или вы также можете переименовать вашу таблицу в oracle, если проблема связана с кейсом, и вы хотите решить ее следующим образом:

ALTER TABLE "Test" RENAME TO TEST;
...