Поставщик OraOledb.Oracle через ASP.NET

Вопрос: Почему мой локальный код может выполнять соединение ORAOleDB.Oracle, но я не могу найти провайдера при запуске анонимного выполнения на тех же веб-сайтах IIS компьютеров.

Поэтому я публикую веб-сайт на своем локальном компьютере для подключения к различным базам данных. Код работает нормально при подключении к базе данных и возвращает код ошибки, который я анализирую. Я просто хочу убедиться, что прослушиватель TNS включен, а прослушиватель Oracle не подключен к нему.

Локально: код проходит

Нажмите на IIS: код ошибки

Однако, когда я публикую код в своем IIS и запускаю тот же самый точный код, я получаю поставщика OraOledb.Oracle, не найденного на локальной машине.

Когда я публикую свой веб-сайт, я получаю следующее сообщение для каждой базы данных Oracle, которую я пробую:

The 'OraOLEDB.Oracle' provider is not registered on the local machine.

I have registered the dll:
cd C:\ProgramData\oracle\oracle11g\BIN
regsvr32 OraOLEDB11.dll

Следующие разрешения для папки, где установлен Oracle

C:\ProgramData\oracle has the following users:
IIS AppPool\DefaultAppPool
IIS_IUSRS
IIS AppPool\ASP.NET v4.0
All these users have Full Control

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

   private void ExecuteDatabase(string database)
    {
        string openstring = "Provider=OraOLEDB.Oracle;Data Source=" + database + ";User Id=x_dummy;Password=x_dummy;Connection Timeout=5;";
        string msg = String.Empty;
        string Elapsed = String.Empty;
        string Result = String.Empty;

        using (OleDbConnection connection = new OleDbConnection(openstring))
        {
            //Timestamp for elapsed time counting
            DateTime stTime = DateTime.Now;
            try
            {
                // Try to connect. If succeed, then close, and create
                // an OK message. x_dummy user and password is improbabile.
                // If connection not successfull, there issued an Oracle
                // exception. We need to parse the exception.
                //connection.ConnectionTimeout = 5;
                System.Diagnostics.Debug.WriteLine("Connection Open");
                connection.Open();
                System.Diagnostics.Debug.WriteLine("Connection Opened");
                // If succeeded...
                msg = "OK";
                //.. then closes
                connection.Close();

            }
            // If connection is not succesfull, we get the errormessage.
            catch (Exception ex)
            {
                //We need the first part of message, this is an Oracle message like this: ORA-01017
                //msg = ex.Message.Split(':')[0];
                msg = ex.Message;
            }
            //Timestamp for elapsed time counting
            DateTime etTime = DateTime.Now;

            //Calculate the elapsed time
            TimeSpan ts = etTime - stTime;

            //Get the millisecs from elapsed time
            Elapsed = ts.Milliseconds.ToString();

            //Get the Result String
            Result = "{" + databaseResult(msg.Split(':')[0]) + "}";
            Result = Result + msg;

        }
    }

    private String databaseResult(string msg)
    {
        string ret = String.Empty;

        switch (msg)
        {
            //kind os listener answers 
            case "ORA-12154":
                ret = "No Oracle listener found";
                break;
            case "ORA-12514":
                ret = "No TNS listener found";
                break;
            case "ORA-12541":
                ret = "No listener ";
                break;
            //ORA-01017 is only good response for us. It means
            //that listener is good, but username and passwor is not.
            //This procedure gives back OK message and elapsed time in this case
            case "ORA-01017":
                ret = String.Format("OK");
                break;
            case "OK":
                ret = String.Format("OK");
                break;
            //In default case this procedure doesn't found listener.
            default:
                ret = "No Oracle listener found";
                break;
        }
        //returns the result of connection                        
        return ret;
    }

0 ответов

Другие вопросы по тегам