Имя: Пароль:
1C
1С v8
Параметры в запросе MS SQL
,
0 Ayvengo
 
31.07.12
17:39
ADOConnection = ПодключитьсяКMSSQL(Отказ);
   Если Отказ Тогда
       Возврат;
   КонецЕсли;
   Выборка = Новый COMОбъект("ADODB.Recordset");
   Выборка.ActiveConnection = ADOConnection;
   ТекстЗапроса = "EXEC tc_FrameRefuelling_FromFileGasNet @fileData;
   Выборка.Open(ТекстЗапроса, ADOConnection);


@fileData varbinary(max)


как мне можно передать двоичные данные на сервер ms sql?
1 Rie
 
31.07.12
17:42
Объект Parameter и CreateParameter
2 Rie
 
31.07.12
17:44
+(1) Только тогда не Recordset, а Command надо
3 Ayvengo
 
31.07.12
17:52
(1) я на сколько понял CreateParameter(Name, Type, Direction, Size, Value)
Name - строка
Type - как задать в 1Ске, если Value = Двоичные данные? Пишет, что типы не совпадают.
4 Ayvengo
 
31.07.12
17:53
попробовал "adVarBinary" - но видимо не то :(
5 izekia
 
31.07.12
17:54
(4) все эти константы имеют числовое представление, читай документацию
6 izekia
 
31.07.12
17:55
а, сорри, (5) не в тему
7 Ayvengo
 
31.07.12
17:56
(5) почему, по идее 204 :)
8 Ayvengo
 
31.07.12
17:58
Но все-равно не пашет.. (:
9 izekia
 
31.07.12
18:01
покажи полностью код?
10 Rie
 
31.07.12
18:02
(4) adVarBinary - оно то... Вот только насчёт возможности туда ДвоичныеДанные запихнуть - сомнительно.
Может, через COMSafeArray попробовать?
11 Ayvengo
 
31.07.12
18:04
(9) остальное - это подключение и опен, смысла нет показывать.

   Выборка = Новый COMОбъект("ADODB.Command");
   Выборка.ActiveConnection = ADOConnection;
   Выборка.CreateParameter("fileData",204,,,);// ошибка не вылетает :) если в последнее добавить двоичные данные, досвидос :(
   ТекстЗапроса = "EXEC tc_FrameRefuelling_FromFileGasNet";
12 izekia
 
31.07.12
18:05
(11) размер кажется надо проставить
и посмотри (10)
13 Ayvengo
 
31.07.12
18:08
Цель задачи у меня извращенная :) в sql просто парсер сделан, который прочитает мне файл и выдаст мне результат. Не хочу в 1Ске парсить файл просто :)))
COMSafeArray  никогда не пользовал, не знаю как с ним быть :(

(12) попробую размер проставить.
14 Ayvengo
 
31.07.12
18:12
Эх ... Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
15 sash-ml
 
31.07.12
18:13
можно попрбовать Выборка.CreateParameter("fileData",204,,,Base64Строка(МоиДвоичныеДАнные))
16 Rie
 
31.07.12
18:14
(13) Так а почему бы файл непосредственно из SQL не прочитать? А имя файла передать параметром?
17 Ayvengo
 
31.07.12
18:28
(16) проблемно. да и процедура уже используется в других местах. можно, конечно и условий понапихать, но чет не айс.
(15) хитрец какой ... я так могу и в тексте запроса параметр указать, но это не то ...
(12) размер не помогает...
18 Ayvengo
 
31.07.12
18:36
на форуме тут нашел:

ТекстЗапроса = "tc_FrameRefuelling_FromFileGasNet @filData";
Выборка.CommandText = ТекстЗапроса;
Выборка.Parameters.Refresh();
Выборка.Parameters.Item(0).Value = 1;

Но почему-то параметров нету :(

Вот как процедура выглядит в SQL

ALTER PROCEDURE [dbo].[tc_FrameRefuelling_FromFileGasNet]
   @filData varbinary(max)
AS
BEGIN
19 Ayvengo
 
31.07.12
18:59
Выборка.ActiveConnection = ADOConnection;
       Выборка.CommandType = 4;
       Выборка.CommandText = "tc_FrameRefuelling_FromFileGasNet;1";
       Выборка.Parameters.Refresh();
         Выборка.Parameters(1).Value = ДД;
Похоже на правду, но опять несоответствие :(
20 Serginio1
 
31.07.12
19:03
А попробуй сэйваррай
21 Ayvengo
 
31.07.12
20:02
Выборка.ActiveConnection = ADOConnection;
       Выборка.CommandType = 4;
       Выборка.CommandText = "tc_FrameRefuelling_FromFileGasNet;1";
       Выборка.Parameters.Refresh();
       Выборка.Parameters(1).Value = Base64Строка(ДД);
работает, но запрос неверно отрабатывает.. завтра буду разбираться
22 smaharbA
 
31.07.12
20:14
куйня
23 Ayvengo
 
01.08.12
10:40
(22) познавательно ;)
24 Serginio1
 
01.08.12
18:02
(21) Потому, что Base64Строка это строка а не двичные данные Safearray

Попробуй через ADODB.Stream и его метод read получить и передать даннные например ADODB запись в таблицу SQL Server - не пашет
25 Serginio1
 
01.08.12
18:06
26 Ахиллес
 
01.08.12
18:28
Если на скуль сервер передавать басе64, а потом уже на сервере декодировать обратно? http://www.motobit.com/help/scptutl/sa307.htm