MySqlDataReader.GetBytes

本文关键字:GetBytes MySqlDataReader | 更新日期: 2023-09-27 18:16:14

我对MySqlDataReader.GetBytes有一点问题,引用列序数

表结构:

ID - Primary, int, not null, auto_increment
TNode - , not null
Packet - longblob
Timestamp - timestamp

如果我运行以下查询:

SELECT * FROM table WHERE TNode = 2;

并尝试使用以下方法获取longblob的大小:

while (reader.Read()) 
{
     long l = reader.GetBytes(2,0,null,0,0);
} 

我将收到以下错误:

GetBytes只能在二进制或guid列上调用

列索引2为。即使像预期的那样遍历所有列,也会收到相同的错误。但是如果我运行以下查询:

SELECT Packet, ID, Timestamp FROM table WHERE TNode = 2;

紧随其后:

while (reader.Read()) 
{
     long l = reader.GetBytes(0, 0, null, 0, 0);
} 

没有问题。我能够得到长blob的长度,并做我需要做的事情。

关于为什么不允许我使用非零列索引的任何想法?

谢谢。

MySqlDataReader.GetBytes

不确定MySQL,但在SQL Server中SELECT *可能不会按您期望的顺序返回列。它可能不是第二列。实际上,如果更改表并继续使用SELECT *,可能会引入一个难以发现的错误。我建议按照您在测试中所做的那样指定列。