Робота з двійковими даними (SQL Server + ASP) h2>
Христофоров Юрій p>
У статті буде розказано як можна працювати з
двійковими даними в SQL Server за допомогою зв'язки ASP + ADO. Поставимо перед собою
три завдання: p>
завантажити jpg-файл у стовпець типу image таблиці SQL
Server p>
вивантажити цей файл зі збереженням на диску p>
відобразити на web-сторінці зображення, взяте з бази
даних p>
Для початку створимо базу даних в SQL Server - нехай
вона буде називатися test. Далі необхідно створити таблицю в нашій базі даних
- Назвемо її blob. Для виконання зазначених дій можна скористатися
інструментом SQL Server Enterprise Manager. p>
Нижче на скріншоти показана структура цієї таблиці: p>
p>
blob_id - первинний ключ таблиці (поле типу IDENTITY) p>
Тепер можна приступати до розробки ASP-скрипта для
завантаження тестового файлу test.jpg в створену таблицю. p>
Починаючи з версії ADO 2.5 і вище в ADO з'явився об'єкт
ADODB.Stream. Він відмінно підходить для роботи з двійковими даними. Його ми і
будемо використовувати. p>
Файл import.asp p>
<% @
Language = VBScript%> p>
<% p>
option
explicit p>
Response.Buffer
= True p>
Response.Expires
= 0 p>
Server.ScriptTimeout
= 600 p>
Dim
cn, rs, objStream, sSQL p>
Set
cn = Server.CreateObject ( "ADODB.Connection") p>
Set
rs = Server.CreateObject ( "ADODB.Recordset") p>
Set
objStream = Server.CreateObject ( "ADODB.Stream") p>
cn.Open
"Provider = SQLOLEDB.1; Initial Catalog = test; Data Source = localhost; UID = yura; PWD = yura;" p>
sSQL
= "SELECT * FROM blob WHERE blob_id = 0" p>
rs.Open
sSQL, cn, 1, 3 p>
rs.AddNew p>
objStream.Type
= 1 p>
objStream.Open p>
'шлях до файлу для завантаження p>
objStream.LoadFromFile (Server.MapPath ("./")
& "Test.jpg") p>
rs.Fields ( "name"). Value =
"Тестова картинка" p>
rs.Fields ( "blob_file"). Value
= ObjStream.Read p>
rs.Update p>
rs.Close p>
objStream.Close p>
cn.Close p>
Set
rs = Nothing p>
Set
objStream = Nothing p>
Set
cn = Nothing p>
%> p>
p>
p>
p>
p>
Файл успішно завантажено! b> p>
center> p>
body> p>
head> p>
html> p>
Тепер напишемо скрипт для експорту двійкових даних з
бази даних в jpg файл. p>
Файл export.asp p>
<% @
Language = VBScript%> p>
<% p>
option
explicit p>
Response.Buffer
= True p>
Response.Expires
= 0 p>
Server.ScriptTimeout
= 600 p>
Dim
cn, rs, objStream, sSQL p>
Set
cn = Server.CreateObject ( "ADODB.Connection") p>
Set
rs = Server.CreateObject ( "ADODB.Recordset") p>
Set
objStream = Server.CreateObject ( "ADODB.Stream") p>
cn.Open
"Provider = SQLOLEDB.1; Initial Catalog = test; Data Source = localhost; UID = yura; PWD = yura;" p>
'фразу однозначно одержує запис
з таблиці p>
'в даному випадку для прикладу blob_id =
1 p>
'у Вашому випадку це може бути інша
число p>
sSQL
= "SELECT * FROM blob WHERE blob_id = 1" p>
rs.Open
sSQL, cn, 1, 3 p>
objStream.Type
= 1 p>
objStream.Open p>
objStream.Write
rs.Fields ( "blob_file"). Value p>
'папка, де зберігається файл, повинна
NTFS мати права на читання/запис для p>
'інтернет-користувача (зазвичай
IUSR_ <ім'я_комп'ютера>) p>
'в даному випадку - це поточна папка p>
objStream.SaveToFile
Server.MapPath ("./") & "test_from_db.jpg", 2 p>
rs.Close p>
objStream.Close p>
cn.Close p>
Set
rs = Nothing p>
Set
objStream = Nothing p>
Set
cn = Nothing p>
%> p>
p>
p>
p>
p>
Файл успішно збережений з бази
даних! b> p>
center> p>
body> p>
head> p>
html> p>
Тепер напишемо скрипт для отримання зображення з
бази даних і безпосереднього відображення на web-сторінці. p>
Файл img.asp p>
<% @
Language = VBScript%> p>
<% p>
option
explicit p>
Response.Buffer
= True p>
Response.Expires
= 0 p>
Server.ScriptTimeout
= 600 p>
Response.ContentType
= "Image/jpeg" p>
Dim
cn, rs, sSQL, binStream p>
Set
cn = Server.CreateObject ( "ADODB.Connection") p>
Set
rs = Server.CreateObject ( "ADODB.Recordset") p>
cn.Open
"Provider = SQLOLEDB.1; Initial Catalog = test; Data
Source = localhost; UID = yura; PWD = yura; " p>
'фразу однозначно одержує запис з
таблиці p>
'в даному випадку для прикладу blob_id =
1 p>
'у Вашому випадку це може бути інша
число p>
sSQL
= "SELECT * FROM blob WHERE blob_id = 1" p>
rs.Open
sSQL, cn, 1, 3 p>
binStream
= Rs.Fields ( "blob_file"). Value p>
rs.Close p>
cn.Close p>
Set
rs = Nothing p>
Set
cn = Nothing p>
Response.BinaryWrite
binStream p>
%> p>
ASP-скрипт img.asp можна вказати в атрибуті src тега
img: p>
Файл img_test.asp p>
<% @
Language = VBScript%> p>
p>
p>
head> p>
p>
p>
p>
center> p>
body> p>
html> p>
Список літератури h2>
Для підготовки даної роботи були використані
матеріали з сайту http://www.activex.net.ru/
p>