Estoy tratando de leer un BLOB de una base de datos Oracle. La función GetFileContent toma p_file_id como parámetro y devuelve un BLOB. El BLOB es un archivo DOCX que debe escribirse en una carpeta en alguna parte. Pero no puedo entender cómo leer el BLOB. Sin duda hay algo almacenado en el parámetro de valor_devuelto-despuésIntentando leer un blob
OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
El valor es {byte [9946]}. Pero me da un error al ejecutar
long retrievedBytes = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize);
Dice InvalidOperationException fue capturado: "No existen datos para la fila o columna."
Aquí está el código:
cmd = new OracleCommand("GetFileContent", oraCon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_file_id", OracleType.Number).Direction = ParameterDirection.Input;
cmd.Parameters[0].Value = fileID;
cmd.Parameters.Add("return_value", OracleType.Blob).Direction = ParameterDirection.ReturnValue;
cmd.Connection.Open();
OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
reader.Read();
MemoryStream memory = new MemoryStream();
long startIndex = 0;
const int ChunkSize = 256;
while (true)
{
byte[] buffer = new byte[ChunkSize];
long retrievedBytes = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize); //FAILS
memory.Write(buffer, 0, (int)retrievedBytes);
startIndex += retrievedBytes;
if (retrievedBytes != ChunkSize)
break;
}
cmd.Connection.Close();
byte[] data = memory.ToArray();
memory.Dispose();
¿Cómo puedo leer el BLOB de la función?
solución final con el código fuente completo de muestra trabajando al respecto? – Kiquenet