Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Загрузка файла на SQL Server  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
Добрый день!
Пытаюсь вставить файл в БД SQL Server (varbinary). Столкнулся с такой проблемой , что вставить можно только те файлы, которые видны SQL Server. А как быть , если клиент хочет с локальной машины загрузить файл в БД?
Спасибо.

Dim connLoad As Object = CreateObject("ADODB.Connection")
Dim ConnectionString As String = "Provider=SQLOLEDB;Data Source=sbs;Initial Catalog=Price;User Id=sa;Password=sapass2005"
connLoad.Open(ConnectionString)

'Находим НДС
StrSQLSelect = "Update dbo.FilesIn Set FileName=(Select '" + ToolStripStatusLabelMessage1.Text + "' as FileName)," + _
"FileData=(SELECT * FROM OPENROWSET(BULK N'" + ToolStripStatusLabelMessage1.Text + "', SINGLE_BLOB) AS FileData) " + _
"Where PriceManufacturer='" + CStr(DataGridViewLoadPrice.CurrentRow.Cells("PriceGroupDataGridViewTextBoxColumn").Value) + "' and " + _
"PriceGroup='" + CStr(DataGridViewLoadPrice.CurrentRow.Cells("PriceGroupDataGridViewTextBoxColumn").Value) + "' AND " + _
"PriceDate='" + Format(DataGridViewLoadPrice.CurrentRow.Cells("PriceDateDataGridViewTextBoxColumn").Value, "yyyy.MM.dd") + "'"
Try
connLoad.Execute(StrSQLSelect)
Catch Ex As Exception
MessageBox.Show("Ошибка :" & Ex.Message)
End Try
connLoad.Close()
22 апр 10, 15:43    [8672332]     Ответить | Цитировать Сообщить модератору
 Re: Загрузка файла на SQL Server  [new]
Alex Shulg
Member

Откуда:
Сообщений: 227
Не знаю, пройдет ли такой вариант с net, но в Delphi (ADO) я делал так:
1) заношу в таблицу всю необходимую информацию о файле и получаю id новой записи
2) читаю из базы только поле которое должно содержать файл (оно пока null) по id, полученному на шаге 1
3) записываю в полученное поле файл и сохраняю изменения

пример:
              DM.ADOQuery.SQL.Add('Begin Tran');
              DM.ADOQuery.SQL.Add('Insert Into ContractFiles');
              DM.ADOQuery.SQL.Add('(ContractID, DocType, LastDT, LastUser, Descr)');
              DM.ADOQuery.SQL.Add('Values(');
              DM.ADOQuery.SQL.Add(IntToStr(ContrID)+',');
              DM.ADOQuery.SQL.Add(IntToStr(TypeDoc)+',');
              DM.ADOQuery.SQL.Add(''''+DateTimeToStr(Now)+''',');
              DM.ADOQuery.SQL.Add(IntToStr(UserID)+',');
              DM.ADOQuery.SQL.Add(''''+St+''')');
              DM.ADOQuery.SQL.Add('select @@identity'); // получаем номер последней записи
              DM.ADOQuery.SQL.Add('Commit Tran');
              DM.ADOQuery.Prepared:=True;
              DM.ADOQuery.Open;
              LastID:=DM.ADOQuery.Fields[0].AsInteger;
              if DM.ADOQuery.Active then DM.ADOQuery.Close;
              DM.ADOQuery.SQL.Clear;
              DM.ADOQuery.SQL.Add('Select FileText From ContractFiles');
              DM.ADOQuery.SQL.Add('Where FileID='+IntToStr(LastID));
              DM.ADOQuery.Prepared:=True;
              DM.ADOQuery.Open;
              DM.ADOQuery.Edit;
              (DM.ADOQuery.FieldByName('FileText') as TBlobField).LoadFromFile(FileName);
              DM.ADOQuery.Post;
              DM.ADOQuery.Close;
Ну а уж как это повторить на .NET, пробуйте сами.
В свое время тоже пробовал загружать файлы средствами самого SQL - наступил на те же грабли, что и Вы.
Удачи.
22 апр 10, 20:21    [8674529]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить