Word ファイルに BLOB データを書き込もうとしています。これが私のコードです
薄暗い reportID を整数 reportID = table1.report_output_data_id として
Dim aSqlStr As String = "SELECT file_data FROM table2 WHERE report_output_data_id = " + Convert.ToString(reportID )
Dim reader As SqlDataReader = CType(WebSession.DataObjectFactory.GetDataProvider("EGDatabase"), cDataProviderSQL).PopulateDataReader(aSqlStr)
' The size of the BLOB buffer.
Dim bufferSize As Integer = 8192
' The BLOB byte() buffer to be filled by GetBytes.
Dim outByte(bufferSize - 1) As Byte
' The bytes returned from GetBytes.
Dim retval As Long
' The starting position in the BLOB output.
Dim startIndex As Long = 0
Do While reader.Read()
' Reset the starting byte for a new BLOB.
startIndex = 0
' Read bytes into outByte() and retain the number of bytes returned.
retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize)
' Continue while there are bytes beyond the size of the buffer.
Do While retval = bufferSize
Response.BinaryWrite(outByte)
' Reposition start index to end of the last buffer and fill buffer.
startIndex += bufferSize
retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize)
Loop
Response.BinaryWrite(outByte)
Loop
reader.Close()
データが 1 GB と大きい場合、以前にメモリ不足の問題があったため、一度に 8k を書き込んでいます。上記のコードの代わりに、使用すると
Response.BinaryWrite(table2.file_data)
すべて正常に動作します。
では、sqldatareader を使用する際の問題点を教えてください。
現在検討中のファイルサイズは31794バイトです
参考: CommandBehavior.SequentialAccess を使用しています