OracleDataReader GetValue создает исключение InvalidOperationException - PullRequest
0 голосов
/ 13 марта 2019

Существует по крайней мере еще одна тема с этим названием или очень близкая к ней, но она не совсем соответствовала моей конкретной реализации, и я не смог найти в ней ответ. У меня есть этот код

<code>
List<string> lsRes = new List<string>();
OracleConnection conn = getOracleConnection();
try
{
    string sqlQuery = "select CTS.SEQ_BATCH_ID.nextval from dual connect by 
level <= " + seqCnt;
    conn.Open();
    OracleCommand cmd = new OracleCommand(sqlQuery, conn);
    cmd.CommandType = CommandType.Text;
    OracleDataReader dr;
    dr = cmd.ExecuteReader();
    while (dr.Read())
        lsRes.Add(dr.GetValue(0).ToString());
}
catch(exception e)
{ 
</code>

Я получаю свое InvalidOperationException на dr.GetValue (0). Есть идеи почему? Последовательность должна возвращать число или числа, я конвертирую их / их в строку / строки. Должен ли я использовать GetOracleValue? Нет ошибок прекомпилятора или компиляции только во время выполнения.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Я не решил свою проблему с OracleDataReader, но мне удалось обойти эту проблему.

List<string> lsRes = new List<string>();
OracleConnection conn = getOracleConnection();
try
{
    DataTable dtValue = new DataTable("ID");
    string sqlQuery = "select  CTS.SEQ_BATCH_ID.nextval from dual connect by level <= 
    " + seqCnt;
    conn.Open();
    OracleCommand cmd = new OracleCommand(sqlQuery, conn);
    cmd.CommandType = CommandType.Text;
    OracleDataAdapter orada = new OracleDataAdapter(cmd);
    orada.Fill(dtValue);
    orada.Dispose();
    cmd.Dispose();

    if (dtValue != null && dtValue.Rows != null && dtValue.Rows.Count > 0 )
        foreach (var item in dtValue.Rows)
            lsRes.Add(((System.Data.DataRow)item).ItemArray[0].ToString());
}
catch
{
0 голосов
/ 13 марта 2019

Я не уверен, на каком языке этот код, но я думаю, что проблема может заключаться в предложении CONNECT BY.Я сомневаюсь, что вы можете использовать это, чтобы сделать то, что вы хотите из этой последовательности.Последовательность вернет одно значение за исполнение.Если у вас есть только одно значение, подключать нечего.

Редактировать: К сожалению, не было известно о трюке CONNECT BY для последовательности.Таким образом, SQL должен работать нормально, если у вас есть разрешения.Не уверен, на каком языке вы используете этот код, но я не думаю, что он должен быть помечен как Oracle.

...