ОК, похоже, никто не знает, как решить проблему. Я зацикливаюсь на курсоре / наборе результатов для хранения в List, поэтому я собираюсь разбить его на части и попытаться пролистать его таким образом. , Итак, прежде всего:
Я добавляю параметры SQL в объект OracleCommand следующим образом (работает нормально):
cmd.Parameters.Add("ABCID", _ABCID);
cmd.Parameters["ABCID"].Direction = ParameterDirection.Input;
cmd.Parameters["ABCID"].DbType = DbType.String;
IOW, когда я добавляю параметр, я передаю имя параметризованной части SQL («ABCID» выше) и значение для его предоставления (_ABCID - это переменная, которая была назначена, скажем, «42»). ).
Однако при добавлении параметра Cursor (output), кажется, требуется не значение (например, объект инициализированного курсора), а просто тип данных:
cmd.Parameters.Add("cur", Devart.Data.Oracle.OracleDbType.Cursor);
cmd.Parameters["cur"].Direction = ParameterDirection.Output;
(я пробовал оба пути, и ни один не работает, так что ...?)
Истинно / таким образом, мой вопрос таков: действительно ли это правильный способ объявления параметра Cursor для вывода обратно для обхода / доступа?
Я использую новую версию компонентов DevArt DotConnect (6.80.332), VS 2010, .NET 4
Обновлен:
Вот код в другом контексте:
public void PopulateCurrentUserRoles(String AUserName, List<String> ACurrentUserRoles) {
_UserName = AUserName;
String query = "select roleid from ABCrole where ABCid = :ABCID";
Devart.Data.Oracle.OracleCommand cmd = new Devart.Data.Oracle.OracleCommand(query, con);
cmd.CommandType = CommandType.Text;
int _ABCID = GetABCIDForUserName();
cmd.Parameters.Add("cur", Devart.Data.Oracle.OracleDbType.Cursor);
cmd.Parameters["cur"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("ABCID", _ABCID);
cmd.Parameters["ABCID"].Direction = ParameterDirection.Input;
cmd.Parameters["ABCID"].DbType = DbType.String;
//cmd.ExecuteNonQuery(); blows up: "illegal variable name/number"
//cmd.ExecuteCursor(); " "
//cmd.ExecuteReader(); " "
Devart.Data.Oracle.OracleCursor oraCursor =
(Devart.Data.Oracle.OracleCursor)cmd.Parameters["cur"].Value;
Devart.Data.Oracle.OracleDataReader odr = oraCursor.GetDataReader(); // "Object reference not set to an instance of an object"
while (odr.Read()) {
ACurrentUserRoles.Add(odr.GetString(0));
}
}