0

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

没问题。我能够得到 longblob 的长度,并用它做我需要做的事情。

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

谢谢你。

4

1 回答 1

0

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

于 2013-05-31T18:46:17.080 回答