2015-03-25 7 views
1

Я пытаюсь получить сертификат, хранящийся как BLOB в базе данных Oracle, но я продолжаю получать пустой массив байтов. Вот фрагмент кода:OracleDataReader возвращает пустой массив байтов для столбца BLOB

 OracleCommand command = new OracleCommand(QUERY_GETURLS, connection); 

     OracleDataReader reader = null; 

     try 
     { 
      connection.Open(); 
      reader = command.ExecuteReader(); 

      while (reader.Read()) 
      { 
       string organization = reader["Organization"].ToString(); 
       string type = reader["Type"].ToString(); 
       string url = reader["DestinationUrl"].ToString(); 
       byte[] certificate = (byte[])reader["Certificate"]; 

Организация, тип и URL возвращаются в порядке, но поле сертификата всегда возвращает пустой массив байтов. Если я вручную запускаю тот же запрос к базе данных, возвращается столбец BLOB. Тип данных столбца - LONG RAW, и я использую ODP.NET.

+2

Вы посмотрели на сопоставления OracleDataType здесь https://msdn.microsoft.com/en-us/library/yk72thhd%28v=vs.110%29.aspx – MethodMan

+1

'OracleDataReader reader', возможно,' BinaryReader' будет работать или взгляните на эту ссылку https://www.devart.com/dotconnect/oracle/articles/lob.html – MethodMan

+0

@MethodMan за это. Я нашел версию ODP.NET этой страницы здесь https://docs.oracle.com/cd/B28359_01/win.111/b28375/featTypes.htm, и они заявляют, что мне нужно использовать OracleBinary, если мой тип столбца - LONG RAW , Я думаю, мне нужно изменить колонку на BLOB и использовать массив байтов. – farbodg

ответ

0

Благодаря Methodman, я был в состоянии найти соответствующую страницу, которая показывает, какие типы данных использовать для ODP.NET:

docs.oracle.com/cd/B28359_01/win.111/b28375/featTypes. htm

Я могу использовать OracleBinary для LONG RAW. После дальнейших исследований кажется, что сообщество Oracle уходит от LONG RAW и к BLOB. Я собираюсь переключить свой тип данных столбца на BLOB и использовать массив байтов.

Смежные вопросы