«SET QUOTED_IDENTIFIER OFF» не сохраняется при нескольких выполнениях ADO.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 «SET QUOTED_IDENTIFIER OFF» не сохраняется при нескольких выполнениях ADO.

Сообщение Anonymous »

У меня есть следующая хранимая процедура:

Код: Выделить всё

CREATE PROCEDURE tsp_ItemIDtoString (@ItemID binary(8), @SItemID nvarchar(32) output) AS
/*
*
* tsp_ItemIDtoString
*
* Returns a comma separated string representation
* of an item id
*
* Parameters:
* @ItemID - (I) binary 8 byte item id
* @SItemID - (O) string representation of item id
*
*/
declare @i as int
set @SItemID = ""
if (@ItemID is not null) begin
set @i = 8
while (@i > 0) begin
select @SItemID = "," + cast(cast(substring(@ItemID, @i ,1) as int) as varchar)  + @SItemID
set @i = @i -1
end
set @SItemID = right(@SItemID, len(@SItemID) - 1 )
end
Если я выполню его непосредственно в SQL Server Management Studio, я получу следующую ошибку:

Объект или имя столбца отсутствует или пусто. Для операторов SELECT INTO убедитесь, что у каждого столбца есть имя. Для других операторов ищите пустые имена псевдонимов. Псевдонимы, определенные как "" или [], не допускаются. Измените псевдоним на допустимое имя.

Это связано с тем, что по умолчанию SET QUOTED_IDENTIFIER включен и не позволяет литералам разделяться одним кавычки.
Если я добавлю следующие строки перед хранимой процедурой в SSMS, она завершится успешно:

Код: Выделить всё

SET QUOTED_IDENTIFIER OFF;
GO

...(The above stored procedure).
Поэтому я применяю то же решение к своему приложению на C++, которое использует соединение ADO для доступа к базе данных SQL Server.
Я делаю следующее:< /p>

Код: Выделить всё

pConnection->Execute(_T("SET QUOTED_IDENTIFIER OFF;");
pConnection->Execute(strDefinition); // strDefinition is the above stored procedure.
Но оператор pConnection->Execute(strDefinition); все равно будет генерировать упомянутую выше ошибку. Похоже, что первый вызов _T("SET QUOTED_IDENTIFIER OFF;") не сохранится.
Почему решение работает для SSMS, но не для ADO?

Подробнее здесь: https://stackoverflow.com/questions/793 ... do-execute
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»