2016-01-21 3 views
0

Iam работает на устаревшем приложении VB6. Я пытаюсь выполнить хранимую процедуру, которая будет проходить через кучу таблиц в SQL-SERVER, захватить данные и поместить их в таблицу в SQL-SERVER. Нужно ли объявлять и устанавливать новый набор записей?Выполнение хранимой процедуры в sql-сервере с vb6?

dim strSQL as string 
strSQL = "Exec FillEmptyTable @blah = "& blah 

Казалось бы, что мне не нужен набор записей, но это не выполняет

Теперь, когда я установил новый набор записей, то он работает

dim rs as adodb.recordset 
set rs = new adodb.recordset 
dim strSQL as string 
strSQL = "Exec FillEmptyTable @blah = "&blah 
rs.open strSQL, Connection 

Является ли это право ? Я не знаю, зачем мне нужен набор записей, если я только создаю его на стороне SQL-SERVER?

+0

Вам действительно нужно параметризовать это вместо выполнения строки. Есть сотни примеров для этого в VB6. –

+1

Как вы можете видеть из вашего примера, строка 'rs.open strSQL, Connection' является той, которая выполняет запрос на [sql-server]. Если вы не указали эту строку (в первом примере), вы просто создаете строку, которая должна быть выполнена, но строка фактически не отправляется на сервер. Набор записей необходим, потому что [vb6] на самом деле не знает, будут ли данные возвращены. Но вы можете также использовать его, чтобы проверить, выполняется ли запрос как ожидалось. Пусть хранимая процедура возвращает 'ok', если все работает или код ошибки, если что-то пошло не так. – Ralph

ответ

1

Если вы не нужны, потому что записи SP не возвращает ни одной строки, или вы не заботитесь о каких-либо строк он вернет вам может просто передать SQL строку к объекту соединения:

Connection.Execute strSQL, 0, adCmdText 

См here для более формального использования с использованием объекта Command, который удаляет потенциальные уязвимости SQL-инъекций, неявные при ручном построении SQL в строке.

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