Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
vldronov
0 / 0 / 0
Регистрация: 03.03.2008
Сообщений: 68
1

ADO и Хранимые процедуры SQL сервера

02.02.2009, 10:18. Просмотров 797. Ответов 8
Метки нет (Все метки)

Можно ли с помощью ADO обновлять рекордсеты полученны при обращении к хранимой процнедуре? БД - SQL Server 2000.
Я был абсолютно уверен, что можно, пока ADO не стало вываливаться с ошибкой 'Row cannot be located for updating. Some values may have been changed since it was last read.'
Открываю я его так(на js):
Код
var strSQL = 'EXEC SPName @SPParameters '
var m_TreeRs = Server.CreateObject('ADODB.Recordset');
m_TreeRs.CursorType = 2;//adOpenDynamic 2 
m_TreeRs.LockType = 3;//adLockOptimistic 3 
m_TreeRs.Open(strSQL, objConn);
Есть подозрение, что для того, чтобы рекордсет можно было редактировать процедура должна быть сделана с удовлетворением некоторых требований, но каких именно - никак не найду.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2009, 10:18
Ответы с готовыми решениями:

Хранимые процедуры SQL и ASP
Есть небольшая проблема, суть в следующем: Есть несколько хранимых процедур которые имеют (каждая)...

Хранимые процедуры
Мне нужно понять для чего используются хранимые процедуры. Можно и ссылку на литературу дать....

AspSmartUpload и Хранимые Процедуры
Каким образом можно передать файл, полученный с помощью AspSmartUpload в Хранимую Процедуру?

Хранимые процедуры и DropDawnList
Дело вот в чем у меня дробдаун заполняется ридером через обращение к хранимой процедуре. Тепер мне...

Хранимые процедуры - с чем их едят?
Привет! Просветите несведущего , что такое хранимые процедуры и собственно где их можно применять?...

8
debutant
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
02.02.2009, 14:03 2
Товарищ по несчастью :-)
Попробуй:
1. CursorLocation=3
2. Вываливай все поля на клиента. У меня только тогда глюки пропали

А вообще, тема достаточно интересная и без экспериментов никуда
0
debutant
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
02.02.2009, 14:10 3
Да, совсем забыл!
Ничего особенного в sp быть не должно. Это ADO код должен быть особенным. Посмотри вот на это:
rst.Properties('Update Criteria')=adCriteriaKey
Это должно быть прописано до открытия набора записей. В этом случае обновление производится на основе первичных ключей. Наиболее применяемый параметр. Можно использовать adCriteriaTimeStamp, тогда используется поле штампа времени. Очень полезен для SQL Server'а.

Резюмирую: эксперименты и еще раз эксперименты!
0
vldronov
0 / 0 / 0
Регистрация: 03.03.2008
Сообщений: 68
02.02.2009, 15:59  [ТС] 4
CorsorLocation и так adUseClient.
Все поля вываливать не надо, так как там join-ы четырех таблиц и получиться многовато.
А вот rst.Properties('Update Criteria') равнялось 2(adCriteriaUpdCols)...

Я пробовать не стал - уже успел переделать все без использования SP, хотя получилось медленнее чем предполагалось с использованием sp, но работает .

Мне кажется, что проблемы возникали из-за того, что у этих таблиц PK у всех не Identity. Плюс не все Not Nullable поля выводились в рекордсет(PK там вообще 2 из четырех выведены). Плюс не все записи были реальными (два из четырех join-ов есть left join).

В общем, немножечко 'не ADO-шный' рекрдсет получается. А радикально что-то исправить в процедуре нет возможности - ее еще много чего использует (без модификаци даных, и вполне успешно).

А вот за 'Update Criteria' спасибо. Буду знать в следующий раз
0
debutant
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
02.02.2009, 17:04 5
Может не из той оперы, но вот такие трюки еще встречаются в умных книжках:
На клиента идет два рекордсета. Пусть это будут 'Заказы' и 'Позиции заказов'. Синхронизация на клиенте тем же скриптом. Клиент их редактирует и отсылает обратно. Эти наборы получает управляющий компонент, который начинает транзакцию, в которую, кроме него входят еще два компонента - один пишет набор 'Заказы' в таблицу 'Заказы', другой пишет набор 'Позиции заказов' в таблицу 'Позиции заказов'.
Блин, просто и со вкусом! Когда прочел, то стало жаль бесполезно проведенное время за строками INSERT, UPDATE и т.д...

Удачи!
0
vldronov
0 / 0 / 0
Регистрация: 03.03.2008
Сообщений: 68
02.02.2009, 17:14  [ТС] 6
Что-то как-то мудрено слишком...
А на кленте объеденить в транзакцию процесс записи таблицы 'Заказы' и 'Позиции заказов' нельзя? И никаких компонетнтов не надо (если конечно объем заказов не милионы)
Я пишу в начале ASP
Код
<%@ Transaction=required Language=JScript %>
А потом добавляй, удаляй, обновляй и проверяй сколько хочешь!
0
debutant
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
02.02.2009, 17:35 7
Дело в том, что можно, но тогда 'страдает масштабируемость приложения, так как работу с уровнем доступа к данным должен выполнять компонент, который кроме как писать/читать не умеет'. Это не мои слова, а из толстых книжек. Но по моему, не очень богатому опыту, делать приложения действительно надо так.
0
vldronov
0 / 0 / 0
Регистрация: 03.03.2008
Сообщений: 68
05.02.2009, 14:57  [ТС] 8
Надо-то оно конечно надо ...
Надо еще классы этих компонентов используя GRASP шаблоны проектировать.
Надо еще при разработке проектов начинать со стадии изучения предметной области, затем анализа, пректирования и т.п.
Только вот, как показывает практика, частенько это совсем не так, к сожалению У заказчика не всегда есть средства на 'всякие глупости', а менеждер не всегда может удбедить заказчитка, что это не глупости.
К чему это я ?
А, к тому, что если делать 'по взрослому', то ASP долно выполнять ф-ции GUI и передачи параметров от пользователя к приложению, реализующему логику. А это приложение должно уже реализоввывать прикладные функции и общатся с базой через какой-нить 'абстрактный' класс-адаптер, чтоб при смене платформы БД, аль при при изменении API от третьей фирмы не приходилось переписывать все приложение.
Только когда надо сделать скрипт, с помощью которого 5 девочек операторов будут забивать в таблички информацию, оно надо?
0
debutant
0 / 0 / 0
Регистрация: 17.08.2007
Сообщений: 539
22.02.2009, 12:29 9
Надо!
Понял, что надо!
Шаблонный подход ко всем задачам.
0
22.02.2009, 12:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2009, 12:29

Все запросы к БД в хранимые процедуры
Вопрос следующий: я вношу все запросы к БД в хранимые процедуры... даже простые select, insert и...

Курсор Recordset и хранимые процедуры
Столкнулся с неприятным явлением: Мне нужно получить статический (adOpenStatic) курсор...

Хранимые процедуры в MSSQL, есть ли смысл их использовать?
Господа выскажите свое мнение о хранимых процедурах в MSSQL .. есть смысл их пользовать ?? Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru