0

Я работаю над комбинацией настольных приложений, базы данных, доступа к веб-серверу, которую кто-то написал несколько лет назад. Моя задача - сделать некоторые оптимизации/рефакторинг и внедрить новые функции для этого приложения. У меня мало опыта в разработке веб-приложений, поэтому мне довольно сложно найти решение моей проблемы, описанное ниже, в надежде, что кто-то сможет мне помочь.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 

Там не было никакой ошибки базы данных.

Все работает отлично со стороны рабочего стола. Как уже упоминалось, хранимые процедуры, выполняемые непосредственно в базе данных, будут работать правильно.Я предполагаю, что ошибка находится где-то в веб-скриптинге. Так что теперь здесь конкретные вопросы:

  1. Почему хранимая процедура не работает (должным образом) при добавлении нового столбца в базе данных (она есть) и без каких-либо ошибок синтаксиса в хранимых процедурах или VBScript?
  2. Почему sqlcmd.Execute перестает работать при добавлении внешнего паттерна в хранимую процедуру вставки? Блок try в хранимых процедурах включает все между «AS BEGIN» и «END», имеющими блокировку захвата непосредственно перед «END». Синтаксис здесь также правильный.

ответ

1

попытаться уловить ошибку на конце asp.

On Error Resume Next 
sqlcmd.Execute 

for each objerr in yourconnection.Errors 
    Response.write objerr.Description & "<br/>" 
next 

On Error GoTo 0 

Пожалуйста, проверьте эту ссылку:

ADO Connection Object Errors Collection

+0

Так как я задал этот вопрос, я не имел возможности попробовать свой намек, потому что у меня были более важные задачи для решения. Теперь я оставляю работу здесь, а это значит, что я не смогу найти проблему. Ваш ответ кажется мне полезным для решения проблемы, так что я дам вам наконец возвышение :) – Onsokumaru

Смежные вопросы