Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL.NET连接器文档混乱_.net_Mysql_Blob_Mysql Connector - Fatal编程技术网

MySQL.NET连接器文档混乱

MySQL.NET连接器文档混乱,.net,mysql,blob,mysql-connector,.net,Mysql,Blob,Mysql Connector,国家: GetBytes返回字段中可用的字节数。在大多数情况下,这是字段的确切长度 但是,将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 >

国家:

GetBytes返回字段中可用的字节数。在大多数情况下,这是字段的确切长度

但是,将
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;
    }
}
对我来说,这根本不是一回事


不管怎样,我的问题是:将内容从数据源获取到
MemoryStream
对象中,最可读的结构是什么?我使用
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;
    }
}

我稍微修改了卢克的代码(并投了赞成票)。不是说更好,只是不同而已。仅适用于小于2GB的字段

private static byte[] ReadBinaryField(MySqlDataReader reader, int fieldIndex)
{
    var remaining = (int)reader.GetBytes(fieldIndex, 0, null, 0, 0);
    var bytes = new byte[remaining];

    while (remaining > 0)
    {
        var offset = bytes.Length - remaining;
        var bytesRead = (int)reader.GetBytes(fieldIndex, offset, bytes, offset, remaining);
        if (bytesRead == 0)
        {
            // Hopefully this is impossible
            throw new Exception("Could not read the rest of the field.");
        }
        remaining -= bytesRead;
    }
    return bytes;
}

如果愿意,您可以将其作为扩展方法。

请不要删除以下好问题: