Я работаю над комбинацией настольных приложений, базы данных, доступа к веб-серверу, которую кто-то написал несколько лет назад. Моя задача - сделать некоторые оптимизации/рефакторинг и внедрить новые функции для этого приложения. У меня мало опыта в разработке веб-приложений, поэтому мне довольно сложно найти решение моей проблемы, описанное ниже, в надежде, что кто-то сможет мне помочь.VBScript, используя хранимые процедуры, не работающие при вводе нового столбца
Веб-приложение написано с ASP и VBScript с некоторыми небольшими функциями javascript, которые не влияют на мой вопрос. Он использует ADODB для связи с базой данных.
База данных - это база данных MS-SQLserver 2008.
Настольное приложение написано на C++/CLI, используя встроенные функции .Net для связи с базой данных. С этим приложением все работает.
Для введения некоторых функций мне нужно добавить новые столбцы в таблицы в базе данных. Вставка и обновление основной таблицы выполняется с помощью хранимых процедур. Я добавил столбец с именем «внутренним» типа «бит»:
ALTER TABLE maintable
ADD internal bit
GO
я изменил хранимые процедуры для вставки и обновления, просто добавив внутренний столбец и параметр для него. Я сделал только эти изменения:
- 1x линия для параметра
- добавлен внутренний в списке столбцов и значения для вставки
- добавлены настройки внутренней колонки с параметром для обновления
В vbscript, который уже работал до любых изменений, я добавил код для добавления значения для внутреннего как новый параметр (его же для вставки &):
sqlcmd.Parameters.Append(sqlcmd.CreateParameter("@internal",11,1))
sqlcmd.Parameters("@internal")=0
После этих изменений процедуры обновления и вставки vbscript перестали работать. Я попробовал несколько типов данных для параметра, а также изменил столбец (другое имя, другой тип данных). Ничего не получилось. Сохраненные процедуры сами работают нормально, когда они выполняются непосредственно в базе данных, а также при использовании настольного приложения.
Я начал отлаживать все, напечатав некоторый ect debuginformations. Я добавил try/catch в хранимых процедурах и outparameter, чтобы получить некоторые ошибки в соответствии с ответом this, и я выбрал все входные параметры в varchar outparameter. Это вызвало следующие странные результаты.
При обновлении «сработало» (поскольку хранимая процедура не вызывала ошибку базы данных, и я получил информацию о параметрах ввода, которая не отображала неправильные значения, но обновление не выполнялось). Вставка не работала. Мои трассировочные выходы, напечатанные до sqlcmd.Execute
, кажется, что эта строка падает, поскольку выходы трассировки после этой строки не печатаются. До тех пор, пока я не использовал внешний образец, сама вставка не работала, но все выходы трассировки были напечатаны. Я пытался получить информацию о возможной ошибке базы данных непосредственно после выполнения кода с:
DECLARE @ErrorVariable INT;
SET @ErrorVariable = @@ERROR;
SELECT @ErrorVariable AS ErrorID,
text
FROM sys.messages
WHERE message_id = @ErrorVariable;
GO
Там не было никакой ошибки базы данных.
Все работает отлично со стороны рабочего стола. Как уже упоминалось, хранимые процедуры, выполняемые непосредственно в базе данных, будут работать правильно.Я предполагаю, что ошибка находится где-то в веб-скриптинге. Так что теперь здесь конкретные вопросы:
- Почему хранимая процедура не работает (должным образом) при добавлении нового столбца в базе данных (она есть) и без каких-либо ошибок синтаксиса в хранимых процедурах или VBScript?
- Почему
sqlcmd.Execute
перестает работать при добавлении внешнего паттерна в хранимую процедуру вставки? Блок try в хранимых процедурах включает все между «AS BEGIN» и «END», имеющими блокировку захвата непосредственно перед «END». Синтаксис здесь также правильный.
Так как я задал этот вопрос, я не имел возможности попробовать свой намек, потому что у меня были более важные задачи для решения. Теперь я оставляю работу здесь, а это значит, что я не смогу найти проблему. Ваш ответ кажется мне полезным для решения проблемы, так что я дам вам наконец возвышение :) – Onsokumaru