OracleDataReader возвращает DBNull для столбца в результате хранимой процедуры - PullRequest
0 голосов
/ 28 мая 2020

прежде всего прошу прощения, что это, вероятно, будет широкий вопрос, но я перепробовал все, что мог придумать, и чувствую, что схожу с ума.

Я вызываю хранимую процедуру, используя Oracle Управляемый доступ к данным и использование OracleDataReader для чтения результатов процедуры. Когда я выполняю хранимую процедуру с теми же точными параметрами, она возвращает 25 строк, причем рассматриваемый столбец имеет значение для одной из этих строк. Когда я вызываю его через код, я получаю тот же самый точный набор результатов, за исключением того одного столбца, в котором все нули. Тип столбца имеет тип Double, если это помогает.

Есть идеи, как я могу решить эту проблему?

Код, вызывающий процедуру:

Using conn As New OracleConnection(GetConnString())
    Using cmd As New OracleCommand()
        cmd.Connection = conn
        conn.Open()

        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = procName
        cmd.Parameters.Add("@i_qry_id", OracleDbType.Int32, 8).Value = qryId
        cmd.Parameters.Add("@i_main_row_var_id", OracleDbType.Int32, 8).Value = mrowvarid
        cmd.Parameters.Add("@i_row_var_id", OracleDbType.Int32, 8).Value = rowVarId
        cmd.Parameters.Add("@i_sel_type", OracleDbType.Int32, 8).Value = sType
        cmd.Parameters.Add("@v_client_id", OracleDbType.NVarchar2, 20).Value = clientId
        cmd.Parameters.Add("@v_user_id", OracleDbType.NVarchar2, 100).Value = userId
        cmd.Parameters.Add("@i_page_size", OracleDbType.Int32, 8).Value = psize
        cmd.Parameters.Add("@i_page_starting_idx", OracleDbType.Int32, 8).Value = psi
        cmd.Parameters.Add("@v_sort_type", OracleDbType.NVarchar2, 40).Value = sortType
        cmd.Parameters.Add("@v_prefix", OracleDbType.NVarchar2, 10).Value = prefix
        cmd.Parameters.Add("@v_text", OracleDbType.NVarchar2, 100).Value = ""
        cmd.Parameters.Add("@v_searchField", OracleDbType.NVarchar2, 100).Value = ""
        cmd.Parameters.Add("@i_search_selected", OracleDbType.Int32, 8).Value = 0
        cmd.Parameters.Add("@i_search_selected_direction", OracleDbType.Int32, 8).Value = 0
        cmd.Parameters.Add("@c_selections", OracleDbType.RefCursor).Direction = ParameterDirection.Output
        Using odr As OracleDataReader = cmd.ExecuteReader()
            While odr.Read()
                icd10 = New PDDAIcd10
                icd10.RowNum = odr("IdNum")
                icd10.ICDNum = FixDBNull(odr("REF_ICD" & icdNumber.ToString() & "_NUM"), StrDBNull.Number)
                icd10.ICD10_CODE = FixDBNull(odr("ICD" & icdNumber.ToString() & "_CODE"), StrDBNull.Str)
                icd10.ICD10_NAME = FixDBNull(odr("ICD" & icdNumber.ToString() & "_NAME"), StrDBNull.Str)
                icd10.CHAPTER_CODE = FixDBNull(odr("CHAPTER_CODE"), StrDBNull.Str)
                icd10.GROUP_CODE = FixDBNull(odr("GROUP_CODE"), StrDBNull.Str)
                icd10.Selected = IIf(FixDBNull(odr("STATUS"), StrDBNull.Number) > 0, 1, 0)
                icd10.ICDQtrCount = FixDBNull(odr("QTR_CNT"), StrDBNull.Number, 0)
                lst.Add(icd10)
            End While
        End Using
    End Using
End Using

odr("STATUS") is всегда DBNull для всех записей, где, как и в Toad, первая запись имеет значение 1.

Спасибо

...