gpt4 book ai didi

c# - 试图读取一个 blob

转载 作者:太空狗 更新时间:2023-10-29 21:55:42 26 4
gpt4 key购买 nike

我正在尝试从 Oracle 数据库中读取 BLOB。函数 GetFileContent 以 p_file_id 作为参数并返回一个 BLOB。 BLOB 是一个 DOCX 文件,需要写入某个文件夹中。但我不太清楚如何阅读 BLOB。在

之后的 return_value-paramater 中肯定存储了一些东西
OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);

值为 {byte[9946]}。但是执行的时候报错

long retrievedBytes = reader.GetBytes(1, startIndex, buffer, 0, ChunkSize);

它说捕获了 InvalidOperationException:“行或列不存在数据。”

代码如下:

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();

如何从函数中读取 BLOB?

最佳答案

看起来您正在使用 Microsoft Oracle 客户端。您可能想要使用 LOB 对象而不是使用 GetBytes(...)。

我认为下面的第一个链接对您来说是最简单的。以下是摘录:

using(reader)
{
//Obtain the first row of data.
reader.Read();
//Obtain the LOBs (all 3 varieties).
OracleLob BLOB = reader.GetOracleLob(1);
...

//Example - Reading binary data (in chunks).
byte[] buffer = new byte[100];
while((actual = BLOB.Read(buffer, 0, buffer.Length)) >0)
Console.WriteLine(BLOB.LobType + ".Read(" + buffer + ", " + buffer.Length + ") => " + actual);

...
}

OracleLob::Read Method

OracleLob Class

OracleDataReader::GetOracleLob Method

附带说明一下,Microsoft Oracle 客户端正在贬值。您可能需要考虑切换到 Oracle 的 ODP.net,因为这将是唯一“官方支持”的客户端。

关于c# - 试图读取一个 blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com