Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему type mismatch?  [new]
sposad
Member

Откуда:
Сообщений: 62187
Возникла необходимость пообщаться с с данными по ADODB. В принципе мне не на сервер надо, но решил проверить на нём. Поискал по инету, нашёл более или менее подходящий пример, переделал под себя, запустил

DECLARE     @returnCode INT,
            @objStream int,
            @objConnection INT,
            @objCommand INT,
            @errorSource VARCHAR(2550),
            @errorDescription VARCHAR(2550),
            @connectionString VARCHAR(1000),
            @returnVal INT--,@rec int


SET @connectionString = 'Provider=SQLOLEDB;Server=server;Database=base;Trusted_Connection=yes'

EXEC @returnCode = sp_OACreate 'ADODB.Connection', @objConnection OUTPUT
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objConnection, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Creating ADODB.Connection Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OACreate 'ADODB.Stream', @objStream OUTPUT
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objStream, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Creating ADODB.Stream Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OACreate 'ADODB.Command', @objCommand OUTPUT
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objCommand, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Creating ADODB.Command Error: ', @errorSource, @errorDescription
END


EXEC @returnCode = sp_OAMethod @objConnection,'Open',NULL,@connectionString--,'',''
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objConnection, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Connection Open Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OASetProperty @objCommand, 'ActiveConnection', @objConnection
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objCommand, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'ActiveConnection Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OASetProperty @objCommand, 'CommandText','SELECT fild from dbo.table where IDfild=12'
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objCommand, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'CommandText Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OASetProperty @objCommand, 'Properties("Output Stream")', @objStream
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objCommand, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Properties("Output Stream") Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OAMethod @objStream,'Open'
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objStream, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Open Error: ', @errorSource, @errorDescription
END

EXEC @returnCode = sp_OASetProperty @objCommand, 'Execute', NULL, NULL, adExecuteStream 
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objCommand, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'Execute Error: ', @errorSource, @errorDescription--здесь выдаёт @errorSource=provider @errorDescription=type mismatch
END

EXEC @returnCode = sp_OAMethod @objStream,'ReadText'
IF @returnCode <> 0
BEGIN
      EXEC sp_OAGetErrorInfo @objStream, @errorSource OUTPUT, @errorDescription OUTPUT
      SELECT 'ReadText Error: ', @errorSource, @errorDescription
END

SELECT @returnCode AS 'Result'

EXEC @returnCode = sp_OADestroy @objConnection
EXEC @returnCode = sp_OADestroy @objStream
EXEC @returnCode = sp_OADestroy @objCommand


Вылетает сабжевая ошибка там где Execute. Подставил вместо select в CommandText строку на update и закомментил в ошибочной строке adExecuteStream - отработало нормально, следовательно почему-то не получается вернуть именно stream. А вот почему?
30 апр 14, 09:57    [15956359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить