Developer29 Ответов: 1

Выполнение читателя кидает ошибку


Привет,

У меня есть две базы данных smart04 и smart02, я могу успешно подключить smartt02 db, но ошибка smart02 вызывает ошибку в строке execute reader. но я вижу, что связь находится в открытом состоянии.

Кто-нибудь, пожалуйста, помогите мне это исправить.
Ошибка:
StackTrace = " в OracleInternal.Сервисные объекты.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors,
SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)\r\n
в OracleInternal.Сервисные объекты.OracleCommandImpl.
Метода executereader(строку запроса, OracleParameterCollection paramColl, свойство commandtype значение commandtype, OracleConnectionImpl connectionImpl,
OracleDataReaderImpl&амп; rdrImpl, longFetchSize типа int32, int64 значение типа clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, типа int64[] scnForExecution,
Типа int64[]&ампер; scnFromExecution, OracleParameterCollection&амп; bindByPositionParamColl, логическое и amp; bBindParamPresent, типа int64&амп; internalInitialLOBFS,
OracleException&амп; exceptionForArrayBindDML, объекта oracleconnection связи OracleLogicalTransaction&амп; oracleLogicalTransaction,
IEnumerable`1 adrianParsedStmt, Boolean isDescribeOnly, Boolean isFromEF)\r\n
в Oracle.ManagedDataAccess.Клиент.OracleCommand.Метода executereader(логическое обновление, логическое fillRequest, метода commandbehavior поведения)\р\н
в Oracle.ManagedDataAccess.Клиент.OracleCommand.ExecuteReader()\r\n


Что я уже пробовал:

SQLHelper conn = new SQLHelper();
                OracleConnection con = conn.GetConnectionString(dbname);

                OracleCommand cmd = new OracleCommand();
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.CommandText = "XYZ";
                cmd.Connection = con;
                con.Open();
                // cmd.ExecuteNonQuery();
                ConnectionState state = con.State;
                if (state == ConnectionState.Open)
                {
                     var j = cmd.ExecuteReader();
                    //cmd.ExecuteNonQuery();

                    string i = cmd.Parameters["val"].Value.ToString();
}
con.Close();

<add name="smart02" connectionstring="Data Source=  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.150.5.46)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = smart02) 
    ));user id=xxxx;password=yyyy;" providername="System.Data.OracleClient">

<add name="smart04" connectionstring="Data Source=  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.150.5.46)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = smart04) 
    ));user id=xxxx;password=yyyy;" providername="System.Data.OracleClient">

Richard Deeming

Вы вставили трассировку стека, но удалили фактические сведения об ошибке.

Нажмите на зеленую ссылку "улучшить вопрос" и обновите свой вопрос, чтобы включить полную информацию об исключении.

Garth J Lancaster

Также было бы удобно, если бы вы опубликовали определение хранимой процедуры, если она достаточно "мала"

1 Ответов

Рейтинг:
2

Garth J Lancaster

Пока не ясно, как много значения вы надеетесь на одно значение метода executenonquery будет делать
1) я не уверен, что вам нужно fanangle с состоянием соединения как таковым
2) это не похоже на то, что вы определили выходной параметр
3) ручное закрытие соединения настолько устарело - вместо этого следует применять блоки использования .. так что, возможно,

string i = "";
SQLHelper conn = new SQLHelper();
using (OracleConnection connection = new OracleConnection(conn.GetConnectionString(dbname)))
using (OracleCommand command = new OracleCommand("XYZ", connection))             
{
  command.CommandType = CommandType.StoredProcedure;
  command.Parameters.Add("val", OracleDbType.Varchar2, 120);
  command.Parameters["val"].Direction = ParameterDirection.Output;
  connection.Open();
  command.ExecuteNonQuery();
  i = command.Parameters["val"].Value.ToString();
}


Developer29

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

Developer29

Я добавил состояние соединения, чтобы проверить успешное соединение.