このメソッドはいくつかの奇妙な結果を返します。なぜこれが起こっているのか、そしておそらく私の望ましい結果を得るための解決策を誰かが説明できるかどうか疑問に思っていました.
結果:
FileName = 私が期待するもの
FileSize = 私が期待するもの
バッファ = すべてのバイト = 0
BytesRead = 0
BlobString = バイナリ データの文字列
FieldType = BLOB (私が期待するもの)
ColumnType = System.String
さらに、ファイルが数 KB より大きい場合、リーダーは StringBuilder の容量引数が 0 より大きくなければならないことを示す例外をスローします (おそらくサイズが Int32.MaxValue より大きいため)。
私の質問は、OdbcDataReader から大きな BLOB を適切に読み取る方法だと思いますか?
public static String SaveBinaryFile(String Key)
{
try
{
Connect();
OdbcCommand Command = new OdbcCommand("SELECT [_filename_],[_filesize_],[_content_] FROM [_sys_content] WHERE [_key_] = '" + Key + "';", Connection);
OdbcDataReader Reader = Command.ExecuteReader(CommandBehavior.SequentialAccess);
if (Reader.HasRows == false)
return null;
String FileName = Reader.GetString(0);
int FileSize = int.Parse(Reader.GetString(1));
byte[] Buffer = new byte[FileSize];
long BytesRead = Reader.GetBytes(2, 0, Buffer, 0, FileSize);
String BlobString = (String)Reader["_content_"];
String FieldType = Reader.GetDataTypeName(2);
Type ColumnType = Reader.GetFieldType(2);
return null;
}
catch (Exception ex)
{
Tools.ErrorHandler.Catch(ex);
return null;
}
}