使用 C# 从 Oracle 中检索 Base64 数据到 JSON

Retrieving Base64 data from Oracle using C# into JSON

我编写了一个 ASP.NET Web 服务,它接受请求,从 Oracle 数据库收集数据并通过 JSON 发回信息。数据包括需要在 Base64 中 returned 的图像文件 (jpg)。

一切顺利,直到我尝试 return 图像。我的代码如下:

Oracle 存储过程:(转述)

create or replace PROCEDURE check_data(
<in parameters here>,
outpixblob      OUT BLOB);

fileptr := utl_file.fopen('PIX_DIR', vFilename, 'rb', 32760);
utl_file.get_raw(fileptr, outpixblob);

这似乎运作良好,因为我已经对其进行了追踪并看到了可预测的数据returned(base64 字符串)

现在,C# 代码:

conn.Open();
            var cmd = new OracleCommand
            {
                Connection = conn,
                CommandText = "CHECK_DATA",
                CommandType = CommandType.StoredProcedure,
            };
            //lots of parameter settings here, just showing the pertinent one
            //cmd.Parameters.Add("outpixblob", OracleDbType.Blob).Direction = ParameterDirection.Output;
            var dr = cmd.ExecuteNonQuery();

            var blob = (OracleBlob) cmd.Parameters["outpixblob"].Value;

            var buffer = new byte[blob.Length];
            blob.BeginChunkWrite();
            blob.Write(buffer, 0, (int)blob.Length);
            blob.EndChunkWrite();
            string photoString = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);


            result = new VisitorCheckResult
            {
                ...
                Photo     =     photoString,

            };

我显然又删掉了不必要的代码,但我相信我正在做的事情的想法就在那里。

photostring的结果不是我调试Oracle sproc时看到的值;相反,它是一长串'\u0000' 一遍又一遍。

我确定我遗漏了一些明显的东西,但作为一个 n00b,我无法看到它是什么。

求助!

好的,找到答案了。原来我在使用 write() 方法时错误地认为它会写入缓冲区。 Write() 方法将数据写入 Oracle BLOB 对象。我需要改为使用 Read() 方法。

发生这种情况后,我将 byte[] 数组转换为 base64:

result.Photo = Convert.ToBase64String(buffer);

结果很漂亮。

感谢所有人,尤其感谢 dbc,他们的回复帮助我了解了发生的事情。