2

このコード行があります

byte[] field1 = (reader.GetSqlBinary(reader.GetOrdinal("Field1")).Value;

これはSqlDataReader

エンタープライズ ライブラリ データ アクセス ブロックを使用するようにコードを変換しようとしていますがbyte[]IDataReader.

私はMSのドキュメントをよく見ましたが、助けになるものは何も見つかりませんでした.

4

1 に答える 1

2

私が最初に試みることは(どこにiあるreader.GetOrdinal("Field1"))です:

    byte[] firstTry = (byte[])reader.GetValue(i);

それが失敗した場合、おそらく:

byte[] secondTry;
using (var ms = new MemoryStream())
{
    byte[] buffer = new byte[8040]; // sql page size
    int read;
    long offset = 0;
    while ((read = (int)reader.GetBytes(i, offset, buffer, 0, buffer.Length)) > 0)
    {
        ms.Write(buffer, 0, read);
        offset += read; // oops! added this later... kinda important
    }
    secondTry = ms.ToArray();
}

また、 を指定するかどうかによって動作若干変わる場合CommandBehavior.SequentialAccessがあります。

于 2010-07-31T19:43:01.920 に答える