Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Работа с документооборотом, технология FileStream  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Lesimel, команда select формируется корректно.
Раскомментируйте insert. выполните процедуру. Ошибка появилась? Если да - приведите её текст. Что возвращает SELECT * FROM ResultWork?
2 июн 11, 18:19    [10755016]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Prolog
Lesimel, команда select формируется корректно.
Раскомментируйте insert. выполните процедуру. Ошибка появилась? Если да - приведите её текст. Что возвращает SELECT * FROM ResultWork?

set quoted_identifier, ansi_nulls on
go
CREATE PROC PResultWorkINSERT
  @LoadDoc      VARCHAR(max),
  @Ik_ReqWork   INT,
  @idUspevDocs  INT
as
  set nocount on

  DECLARE @sql nvarchar(4000)
  SELECT  @sql = N'SELECT newid(),'+CAST(@Ik_ReqWork as nvarchar)+N','+CAST(@idUspevDocs as nvarchar)+N',* FROM OPENROWSET(BULK N'''+@LoadDoc+''', SINGLE_BLOB) AS Document'
PRINT @sql
  INSERT INTO dbo.ResultWork(Ik_ResultWork,Ik_ReqWork,idUspevDocs,LoadDoc)  EXECUTE(@sql)

  RETURN @@error
go

EXEC PResultWorkINSERT
'net_share.bmp',1,1

Сообщение:
SELECT newid(),1,1,* FROM OPENROWSET(BULK N'net_share.bmp', SINGLE_BLOB) AS Document
Сообщение 4860, уровень 16, состояние 1, строка 1
Массовая загрузка невозможна. Файл "net_share.bmp" не существует.

А когда выполняешь SELECT * FROM ResultWork возвращает пустую таблицу.
2 июн 11, 18:27    [10755071]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А где ваш файл лижит, у клиента?
2 июн 11, 18:28    [10755075]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Гавриленко Сергей Алексеевич
А где ваш файл лижит, у клиента?

на С диске
2 июн 11, 18:37    [10755127]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Lesimel
Гавриленко Сергей Алексеевич
А где ваш файл лижит, у клиента?

на С диске
Т.е. сервер, выполняя хранимую процедуру, должен полезть на клиентскую машину минуя все на свете, найти файл на диске c: и записать его в таблицу?
2 июн 11, 19:00    [10755272]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Гавриленко Сергей Алексеевич
должен полезть на клиентскую машину минуя все на свете


Уже обсудили. Полторы страницы идет разбор вопроса "какой синтаксис правильный", а вовсе не "как создать законченное приложение". Ну вообщем-то и первый вопрос имеет право на задавание, вай бы и не нот?
2 июн 11, 19:05    [10755294]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Гавриленко Сергей Алексеевич
Lesimel
пропущено...

на С диске
Т.е. сервер, выполняя хранимую процедуру, должен полезть на клиентскую машину минуя все на свете, найти файл на диске c: и записать его в таблицу?



по процедуре получается так, а как вообще это реализуется, если подходить серьезно?
2 июн 11, 21:41    [10755861]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Lesimel
по процедуре получается так, а как вообще это реализуется, если подходить серьезно?

Это не по процедуре получается, это в ваших мечтах так выходит... Хотя при должном упорстве можно и из сервера клиента пытаться соорудить, ценой неимоверных усилий и ограничения функциональности.

А вот правильно делается по-другому, о чем вам упорно пытаются сказать.
1. Определиться с клиентом и обдумать механизм доставки файла на сервер.
2. Реализовать.
3. А дальше уж сервер у себя же возьмет, че ему нужно. Т.е. никаких "окошек" с кнопачками у SQL Server нет и не будет.
2 июн 11, 21:54    [10755934]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Lesimel, вы не хотите говорить приближённо как там будет. Приведу адын случай.
1. В браузере заполняется форма, выбираются файлы, тыкается кнопка, форма вызывает web сервер
2. Web сервер обращается к скулю (не обязательно процедура) открывает транзакцию и получает дескриптор(ы) файла(ов)
3. Записывает через полученный(е) дескриптор(ы) данные взятые из потока (приходящего от браузера), закрывает дескриптор(ы) и закрывает транзакцию
4. PROFIT

Ещё адын:
1. --//--
2. Web сервер открывает транзакцию, вызывает процедуру передавай данные (VarBinary(max)) через параметры, закрывает транзакцию
3. PROFIT

Но других вариантов куча. Типа вместо Web сервера - клиентское приложение.
2 июн 11, 22:15    [10756022]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Mnior
2. Web сервер открывает транзакцию, вызывает процедуру с передачей данных через параметры VarBinary(max), закрывает транзакцию
2 июн 11, 22:17    [10756033]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Mnior, чуть вас дополню, мож ТС встанет на правильный путь...

Если это всеж-таки будет вебприложение и при этом сервер приложений и сервер баз данных - одна и та же машина, то задача достаточно проста - в браузере пользователь выбирает файлик, который грузится в какую-нить папку на сервере приложений, а потом для SQL Server достаточно указать, где эти файлы брать. Если же веб-сервер и сервер баз данных разнесены, то все чуть сложнее. Но эти вопросы нужно решать чем раньше, тем лучше, чтобы потом не переделывать.

* Если для клиента выбран ASP.NET, то SQL Server Express дается в нагрузку)))), подключение к проекту - парочка тырков мышкой, что сильно все упрощает.
** Еще раз повторюсь - о клиенте нужно думать не спустя пол-года, а прям вчера.
2 июн 11, 22:31    [10756103]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
kDnZP
Mnior, чуть вас дополню, мож ТС встанет на правильный путь...

Если это всеж-таки будет вебприложение и при этом сервер приложений и сервер баз данных - одна и та же машина, то задача достаточно проста - в браузере пользователь выбирает файлик, который грузится в какую-нить папку на сервере приложений, а потом для SQL Server достаточно указать, где эти файлы брать. Если же веб-сервер и сервер баз данных разнесены, то все чуть сложнее. Но эти вопросы нужно решать чем раньше, тем лучше, чтобы потом не переделывать.

* Если для клиента выбран ASP.NET, то SQL Server Express дается в нагрузку)))), подключение к проекту - парочка тырков мышкой, что сильно все упрощает.
** Еще раз повторюсь - о клиенте нужно думать не спустя пол-года, а прям вчера.


Это будет веб-приложение, сервер приложений и сервер баз данных - одна и та же машина :)
2 июн 11, 22:43    [10756139]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Но вопрос все таки открыт, что делать с этой ХП?! :)
2 июн 11, 22:45    [10756145]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Lesimel
Это будет веб-приложение, сервер приложений и сервер баз данных - одна и та же машина :)
Вторая ссылка: 10749787
2 июн 11, 22:47    [10756154]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Lesimel
Сообщение:
SELECT newid(),1,1,* FROM OPENROWSET(BULK N'net_share.bmp', SINGLE_BLOB) AS Document
Сообщение 4860, уровень 16, состояние 1, строка 1
Массовая загрузка невозможна. Файл "net_share.bmp" не существует.

Положить файл туда (на сервер баз данных), где этот файл будет найден. Путь и имя файла - передать в вашу процедуру.
Вопрос о доставке файла на сервер - это вопрос клиента.
2 июн 11, 22:50    [10756169]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
kDnZP
Путь и имя файла
Не нужно. Надо web поток браузера перенаправить в поток файла, дескриптор которого web сервер получит от sql сервера.
2 июн 11, 22:58    [10756198]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Mnior
Lesimel
Это будет веб-приложение, сервер приложений и сервер баз данных - одна и та же машина :)
Вторая ссылка: 10749787

CREATE PROC PResultWorkINSERT
  @Ik_ReqWork   INT,
  @idUspevDocs  INT,
  @LoadDoc VARBINARY(max)
as
INSERT INTO ResultWork
  (Ik_ReqWork,idUspevDocs,LoadDoc)
    VALUES (@Ik_ReqWork,@idUspevDocs, CAST ('' as varbinary(max)));
GO



--Вызываю процедуру, а какое значение @LoadDoc?
EXEC PResultWorkINSERT
1,1, ...
2 июн 11, 23:08    [10756228]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Mnior
kDnZP
Путь и имя файла
Не нужно. Надо web поток браузера перенаправить в поток файла, дескриптор которого web сервер получит от sql сервера.

Ну я FileStream знаю очень поверхностно. Дело в том, что хоть и есть проекты ASP.NET+SQL, только сервак 2000 до сих пор, а задач хранить файлы не возникало - максимум распарсерить че-нить на уровне сервера приложений и положить базу данных...

* Но приведенные вами ссылки, ессно почитаю для общего развития)))).
2 июн 11, 23:14    [10756245]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Lesimel
Mnior
пропущено...
Вторая ссылка: 10749787

CREATE PROC PResultWorkINSERT
  @Ik_ReqWork   INT,
  @idUspevDocs  INT,
  @LoadDoc VARBINARY(max)
as
INSERT INTO ResultWork
  (Ik_ReqWork,idUspevDocs,LoadDoc)
    VALUES (@Ik_ReqWork,@idUspevDocs, CAST ('' as varbinary(max)));
GO



--Вызываю процедуру, а какое значение @LoadDoc?
EXEC PResultWorkINSERT
1,1, ...



я опять походу что-то не то делаю...
2 июн 11, 23:37    [10756331]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Lesimel,

ну и упортсво ...
что бы вы не пердавали в свой LoadDoc у вас все рано будет там пусто...потому как
автор
СAST ('' as varbinary(max))

.....я не знаю, чем писать здесб по 20 раз одно и тоже.. открылиб страницк документаци вам приведенную.. ну честно
3 июн 11, 00:01    [10756404]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Lesimel
Prolog
Lesimel, команда select формируется корректно.
Раскомментируйте insert. выполните процедуру. Ошибка появилась? Если да - приведите её текст. Что возвращает SELECT * FROM ResultWork?

set quoted_identifier, ansi_nulls on
go
CREATE PROC PResultWorkINSERT
  @LoadDoc      VARCHAR(max),
  @Ik_ReqWork   INT,
  @idUspevDocs  INT
as
  set nocount on

  DECLARE @sql nvarchar(4000)
  SELECT  @sql = N'SELECT newid(),'+CAST(@Ik_ReqWork as nvarchar)+N','+CAST(@idUspevDocs as nvarchar)+N',* FROM OPENROWSET(BULK N'''+@LoadDoc+''', SINGLE_BLOB) AS Document'
PRINT @sql
  INSERT INTO dbo.ResultWork(Ik_ResultWork,Ik_ReqWork,idUspevDocs,LoadDoc)  EXECUTE(@sql)

  RETURN @@error
go

EXEC PResultWorkINSERT
'net_share.bmp',1,1

Сообщение:
SELECT newid(),1,1,* FROM OPENROWSET(BULK N'net_share.bmp', SINGLE_BLOB) AS Document
Сообщение 4860, уровень 16, состояние 1, строка 1
Массовая загрузка невозможна. Файл "net_share.bmp" не существует.

А когда выполняешь SELECT * FROM ResultWork возвращает пустую таблицу.

Я вам уже писал здесь.
Нужно указать путь к файлу. При этом если вы вызовете EXEC PResultWorkINSERT 'C:\net_share.bmp',1,1 - SQL server будет искать файл net_share.bmp на диске C: компьютера самого SQLсервера. Я так понимаю, что файл находится на каком-то компьютере пользователя. В этом случае папка с файлом должна быть расшарена, учетная запись, под которой выполняется хранимая процедура должна иметь доступ на чтение к этой папке, в хранимую процедуру нужно передвавть имя файла в следующем виде: '\\компьютер_клиента\расшаренная_папка\net_share.bmp'.
3 июн 11, 09:27    [10756892]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
Кстати, для эксперимента. Поместите файл net_share.bmp в папку C:\ компьютера, на котором установлен SQL сервер. Выполните EXEC PResultWorkINSERT 'C:\net_share.bmp',1,1 (только не ждите, что SELECT * FROM ResultWork отобразит вам картинку, которую вы записали в базу данных).
3 июн 11, 09:44    [10756987]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Mnior
Не нужно. Надо web поток браузера перенаправить в поток файла, дескриптор которого web сервер получит от sql сервера.


Хмм... Предлагаемое прокатит даже в случае классической трехзвенки с разнесеными БД- и app- серверами? Сомневаюсь... Нет, понятно, что на одном PC все будет четко, но так тогда у нас файл для загрузки УЖЕ лежит локально на скуле - к чему танцы с бубном и потоками? Пусть скуль его просто открывает и работает с ним.
В общем пока не будет поставлена точка в архитектуре солюшена все это слова. Поэтому и тему колбасит от разборов принципиальных дизайнерских решений до супер-мелких технических нюансов вроде "запятой тут не хватает".
3 июн 11, 09:51    [10757016]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
Prolog
Кстати, для эксперимента. Поместите файл net_share.bmp в папку C:\ компьютера, на котором установлен SQL сервер. Выполните EXEC PResultWorkINSERT 'C:\net_share.bmp',1,1 (только не ждите, что SELECT * FROM ResultWork отобразит вам картинку, которую вы записали в базу данных).


так понятно что он ее не обобразит...но данные о ней же должны быть в таблице, зачем тогда ХП писать если данные в таблице не записываются
3 июн 11, 10:05    [10757100]     Ответить | Цитировать Сообщить модератору
 Re: Работа с документооборотом, технология FileStream  [new]
Lesimel
Member

Откуда:
Сообщений: 32
CREATE PROC PResultWorkINSERT
  @Ik_ReqWork   INT,
  @idUspevDocs  INT,
  @LoadDoc VARBINARY(max)
as
INSERT INTO ResultWork
  (Ik_ReqWork,idUspevDocs,LoadDoc)
    VALUES (@Ik_ReqWork,@idUspevDocs, @LoadDoc);
GO

Может написать ее тупо так?
А потом как-то программно задавать?
3 июн 11, 10:11    [10757134]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить