У меня есть база данных с поддержкой File-Stream. Я создал таблицу со столбцом, который имеет атрибут «file-stream» и может успешно записать строку в таблицу. Итак, у меня есть изображение, хранящееся в моем «Файловом потоке» как BLOB.
В чем моя проблема?
Я должен получить это изображение и показать его в веб-браузере, используя классический asp (я совершенно новичок на этом языке сервера, и мне не разрешено использовать asp.net). Я много искал и читал (есть много информации о том, как сделать это с asp.net, и почти ничего не показывает, как это сделать с классическим asp) и нашел статью (http://www.simple -talk.com / sql / learn -sql-server / введение-в-sql-server-filestream / ), показывающий способы чтения данных:
«Доступ к данным FILESTREAM с помощью TSQL» и «Доступ к данным FILESTREAM с помощью управляемого API»
Первый, который я смог понять и использовать. Второй (есть пример с кодом vb.net) у меня не получилось.
Это код:
‘Create a connection to the database
Dim ConStr As String
ConStr = "Data Source=JACOBXPS\katmaifs;Initial Catalog=NorthPole" & _
";Integrated Security=True"
Dim con As New SqlConnection(ConStr)
con.Open()
'Retrieve the FilePath() of the image file
Dim sqlCommand As New SqlCommand()
sqlCommand.Connection = con
sqlCommand.CommandText = "SELECT ItemImage.PathName() AS PathName " + _
"FROM items WHERE ItemNumber = 'MS1001'"
Dim filePath As String = sqlCommand.ExecuteScalar()
'Obtain a Transaction Context
Dim transaction As SqlTransaction = con.BeginTransaction("ItemTran")
sqlCommand.Transaction = transaction
sqlCommand.CommandText = "SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()"
Dim txContext As Byte() = sqlCommand.ExecuteScalar()
' Open and read file using SqlFileStream Class
Dim sqlFileStream As New SqlFileStream(filePath, txContext, FileAccess.Read)
Dim buffer As Byte() = New Byte(sqlFileStream.Length) {}
sqlFileStream.Read(buffer, 0, buffer.Length)
'Bind the image data to an image control
Dim ms As MemoryStream = New MemoryStream(buffer)
Dim bmp As Bitmap = New Bitmap(ms)
ItemImage.Image = bmp
'Cleanup
sqlFileStream.Close()
sqlCommand.Transaction.Commit()
con.Close()
Мне не удалось преобразовать это в классического осина, но в той же статье я прочитал нечто более разочаровывающее:
При доступе к данным FILESTREAM с использованием TSQL SQL Server считывает содержимое файла данных> FILESTREAM и передает его клиенту. Память SQL Server используется для чтения> содержимого файла данных. Доступ к данным FILESTREAM с использованием потоковой передачи Win32 не использует память SQL Server. Кроме того, это позволяет приложению использовать> возможности потоковой передачи файловой системы NT.
Так в чем же моя настоящая проблема?
Может ли код vb.net преобразовываться и использоваться в классическом asp? И если это возможно, значит ли это, что когда я использую "file-stream", включаю фьючерсы и хочу отображать данные в Интернете, это будет медленнее, чем использование настольного приложения?
Я в замешательстве и буду благодарен за любой ответ или ссылку на статью для чтения.