Как решить «ORA-06508: PL/SQL: не удалось найти вызываемый программный модуль» без перезапуска пула приложений IISC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как решить «ORA-06508: PL/SQL: не удалось найти вызываемый программный модуль» без перезапуска пула приложений IIS

Сообщение Anonymous »

У меня есть пакет Oracle, который успешно компилируется. Однако после смены пакета, когда я пытаюсь использовать этот пакет, я получаю сообщение об ошибке:
ORA-06508: PL/SQL: could not find program unit being called

Эта ошибка сохраняется до тех пор, пока я не перезапущу пул приложений IIS. Мое приложение создает новое соединение каждый раз, когда использует пакет, и после этого правильно закрывает соединение. Я пробовал установить Validate Connection=True; в строке подключения, но это не помогает.
Интересно, что проблема исчезает, когда я отключаю пул соединений, добавляя Pooling= Ложь; в строку подключения.
как решить эту проблему, не отключая пул соединений?
public void ExecuteProcedure(string precoureName, OracleConnection conn, object parameters, Dictionary output)
{
using (OracleConnection connmain = GetOracleConnection(conn))
{
OracleCommand cmd = new OracleCommand(precoureName, connmain) { CommandType = CommandType.StoredProcedure };
AddParametersToCommand(cmd, string.Empty, parameters, false);

List outparams = GetOutputParams(output, cmd);
cmd.ExecuteNonQuery();

for (int i = 0; i < outparams.Count; i++)
{
if (outparams.OracleDbType == OracleDbType.Clob)
{
output[outparams.ParameterName] = DBNull.Value;
if (outparams != null)
{
Oracle.ManagedDataAccess.Types.OracleClob res = (Oracle.ManagedDataAccess.Types.OracleClob)outparams.Value;
if (res != null && !res.IsNull)
{
output[outparams.ParameterName] = res.Value;

}
}
}
else
{
output[outparams.ParameterName] = outparams.Value;

}
}

CloseOracleConnection(conn, connmain);
}
}

private void CloseOracleConnection(OracleConnection conn, OracleConnection connmain)
{
if (conn == null && connmain.State != ConnectionState.Closed)
{
if (AutoClearPool)
{
OracleConnection.ClearPool(connmain);
}
connmain.Close();
}
}

private OracleConnection GetOracleConnection(OracleConnection conn)
{
OracleConnection connmain;
if (conn == null)
{
connmain = new OracleConnection(ConnectionString); connmain.Open();
}
else { connmain = conn; }

return connmain;
}


Подробнее здесь: https://stackoverflow.com/questions/643 ... called-wit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»