Chr*_*per 2 .net mysql blob mysql-connector
GetBytes 返回字段中的可用字节数。在大多数情况下,这是字段的确切长度。
但是,MySQL 5.0 Connector.NET 文档列出了GetBytes作为读入缓冲区的字节数的返回值。
对我来说,这根本不是一回事!
无论如何,我的问题是:将内容从数据源获取到MemoryStream对象中最易读的构造是什么?我正在使用 from 的返回值GetBytes来增加方法的数据索引参数,GetBytes但似乎我一直在超出该字段,因为我IndexOutOfRangeException被抛出了。
我同意文档MySqlDataReader还有很多不足之处。
当您null作为buffer参数传递时,GetBytes返回字段的总长度。传递非空buffer参数时,GetBytes返回写入缓冲区的字节数。
long length = yourReader.GetBytes(columnOrdinal, 0, null, 0, 0);
long offset = 0;
var buffer = new byte[4 * 1024]; // 4KB buffer
var ms = new MemoryStream();
while (length > 0)
{
long bytesRead = yourReader.GetBytes(columnOrdinal, offset, buffer, 0,
(int)Math.Min(length, buffer.Length));
if (bytesRead > 0)
{
ms.Write(buffer, 0, (int)bytesRead);
length -= bytesRead;
offset += bytesRead;
}
}
Run Code Online (Sandbox Code Playgroud)