Пожалуйста, объясните, как хранить файлы (картинки) в базе, и как их оттуда доставать
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Пожалуйста, объясните, как хранить файлы... Expand / Collapse
Автор
Сообщение
09.11.2001 17:13
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 11.02.2003 20:35
Сообщ.: 43, Visits: 474
Добрый день.

Не могли бы Вы на пальцах объяснить, как класть и доставать картинки в MS SQL 2000 / ASP?

Какой тип данных использовать? Как в ASP передать картинку сразу на выход? Как картинку запихать в базу?
Сообщ. #732192
12.11.2001 12:46
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior 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
Сообщ. #732395
12.11.2001 12:58
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 11.02.2003 20:35
Сообщ.: 43, Visits: 474
Большое спасибо за помощь всем откликнувшимся.

Я сделал без всяких "чанков" - запихиваю в базу через ADODB.command, создавая параметр данного типа (adLongVarBinary, 205).

Достаю просто через adodb.connection, и его execute("exec хранимую процедуру"), и рекордсет этой хранимой процедуры response.addheader и response.BinaryWrite.

Все вроде работает :)
Сообщ. #732398
18.11.2001 10:01
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum 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 - это оно??
Сообщ. #733297
18.11.2001 11:01
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum 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...
Сообщ. #733311
18.11.2001 11:25
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 28.06.2002 21:38
Сообщ.: 47, Visits: 518
Работать с типами данных типа Image, по-моему, не очень хорошо.
Я плотно с картинками дела не имел, но везде, где я работал, картинки хранились просто в файлах, а в базе были только ссылки. Наверное, это не спроста :).
Сообщ. #733314
18.11.2001 12:58
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 23.11.2001 16:34
Сообщ.: 30, Visits: 331
логично предположить - чтобы не перегружать зря базу... хотя в некоторых случаях это удобно...

но, вопрос был не в этом, а в том, использовать или не использовать *chunk? вроде бы и без них работает... есть какие-то грабли здесь??
Сообщ. #733317
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 1:13