|
|
|
Forum Member
      
участник
Last Login: 11.02.2003 20:35
Сообщ.: 43,
Visits: 474
|
|
Добрый день.
Не могли бы Вы на пальцах объяснить, как класть и доставать картинки в MS SQL 2000 / ASP?
Какой тип данных использовать? Как в ASP передать картинку сразу на выход? Как картинку запихать в базу?
|
|
|
|
|
Junior Member
      
участник
Last Login: 30.11.2001 17:47
Сообщ.: 22,
Visits: 243
|
|
В базе соответственно заведи поле типа image (16 байтовая ссылка на область хранящую содержимое рисунка). Теперь что касается передачи Client -> IIS( ASP script ) -> DBMS ( MS SQL 2k): передачу между Client -> Server, содержимого и его прием соответственно выполняют методы BinaryRead 7 BinaryWrite, только будь поосторожнее так как ASP любит приводить типы данных без твоего согласия (в данном случае она будет пытаться привести двоичный тип к строке). а между Server -> DBMS все проще, есть у Recordset'а методы GetChunk & AppendChunk, где соответственно ты имеешь возможность запихнуть и вытащить из базы эту картинулю. Hi
|
|
|
|
|
Forum Member
      
участник
Last Login: 11.02.2003 20:35
Сообщ.: 43,
Visits: 474
|
|
Большое спасибо за помощь всем откликнувшимся.
Я сделал без всяких "чанков" - запихиваю в базу через ADODB.command, создавая параметр данного типа (adLongVarBinary, 205).
Достаю просто через adodb.connection, и его execute("exec хранимую процедуру"), и рекордсет этой хранимой процедуры response.addheader и response.BinaryWrite.
Все вроде работает :)
|
|
|
|
|
Forum Member
      
участник
Last Login: 23.11.2001 16:34
Сообщ.: 30,
Visits: 331
|
|
Вообще говоря, есть мнение что: "Long data types include Microsoft® SQL Server™ ntext, text and image data types. ntext, text and image data is sometimes so large that it cannot be retrieved in a single operation or fit into memory. If the long data can fit into memory, the Value property of the Field object can be used to retrieve all the data in one operation. If the long data is too large to fit into memory, the data must be retrieved or written in chunks." (это из хелпа по mssql 7.0. Поэтому пока каждая отдельно взятая картинка маленькая - все будет ок, но когда появится нужда в чем-то что не "fit into memory" вылезет ошибка...
Хотелось бы, кстати, уточнить у общественности: каков именно этот самый размер памяти?? что имеется ввиду... помнится где-то натыкался на упоминание чего-то около 64k - это оно??
|
|
|
|
|
Forum Member
      
участник
Last Login: 23.11.2001 16:34
Сообщ.: 30,
Visits: 331
|
|
хотя, опять же, заинтересовавшись данным вопросом попробовал прогнать простенький код добавляющий запись в базу, что-то в этом роде:
dim cn, rs, temp set cn = Server.CreateObject("ADODB.Connection") cn.Open strDB cn.Execute("INSERT INTO dbTest (itemName, itemText) VALUES ('test','" & string(100000000,"*") & "')") set rs = cn.Execute("SELECT @@IDENTITY AS 'ID';") temp = rs("ID") set rs = cn.Execute("SELECT itemName, itemText FROM dbTest WHERE ID=" & temp & ";") Response.Write rs("itemName") Response.Write "<br>" Response.Write Len(rs("itemText")) Response.Write "<br>" Response.Write rs("itemText") Response.End
дык, вот при параметре string(10000000) (10Mb - грубо говоря :) никаких сбоев... при 100000000 (100Mb) система сказала кряк, пожаловалась на недостаток virtual memory и начала оптимизацию памяти (в системе физически 384 Mb + 256-512 Mb swap, ну и висит там еще всякое)... скрипт впоследствии вылетел по таймауту... но опять же, не из-за ошибок... дык вот может быть стоит забить на appendChunk и getChunk? по крайней мере все работает и так на весьма приличных объемах...
Пробовал на: Windows 2000 Prof + MS SQL 7.0...
|
|
|
|
|
Forum Member
      
участник
Last Login: 28.06.2002 21:38
Сообщ.: 47,
Visits: 518
|
|
Работать с типами данных типа Image, по-моему, не очень хорошо. Я плотно с картинками дела не имел, но везде, где я работал, картинки хранились просто в файлах, а в базе были только ссылки. Наверное, это не спроста :).
|
|
|
|
|
Forum Member
      
участник
Last Login: 23.11.2001 16:34
Сообщ.: 30,
Visits: 331
|
|
логично предположить - чтобы не перегружать зря базу... хотя в некоторых случаях это удобно...
но, вопрос был не в этом, а в том, использовать или не использовать *chunk? вроде бы и без них работает... есть какие-то грабли здесь??
|
|
|
|