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 に答える