powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.NET 2: DataSet + хранимые процедуры
11 сообщений из 11, страница 1 из 1
ADO.NET 2: DataSet + хранимые процедуры
    #34281209
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь сделать Windows Forms приложение, используя .NET 2.0 и SQL Server 2005 Express.
Тривиальная задача - в DataGridView организовать выборку/вставку/редактирование/удаление.
Вместо прямого обращения к таблице используются 4 хранимые процедуры - выборка/вставка/редактирование/удаление.
При генерации датасета и адаптера подтянулась вся нужная информация - все как надо - поля, первичный ключ...
Но вот в чем дело: значение первичного ключа (тип поля uniqueidentifier - GUID, одним словом) генерируется хранимой процедурой, отвечающей за вставку данных. То есть для этого поля у процедуры есть параметр, и он имеет направление output. Но перед тем, как дергать процедуру, ADO.NET пытается сохранить запись в своем датасете и видит, что поле not nullable, и типа неплохо было бы туда что-нибудь занести, и до вызова хранимой процедуры дело не доходит - выскакивает ошибка.
Я попытался в датасете для этого поля указать, что якобы оно позволяет хранение DBNull, но ошибка не исчезла. Подозреваю, что надо править в нескольких местах.
Но в любом случае так поступать не хотелось бы, "дабы не нарушать отчетности". Все же приятней, когда датасет описывает реальную структуру данных. Только как бы ему сказать, что null-овость поля надо проверять _после_ того, как дернули хранимую процедуру, а не раньше, и при этом заполнив это поле значением output-параметра из процедуры?
Что подскажете?
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34281386
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DataSet.EnforceConstraints = false
когда их выключать и включать решай по ситуации
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34281404
Фотография (`yka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не стоит себе проблемы выдумывать - вставляй на клиенте Guid.NewGuid(). Как грица, если нет разницы, зачем платить больше?!


─────────
∙ Иногда решительный шаг вперед - результат хорошего пинка сзади ∙
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34281427
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, спасибо.
Видимо, придется изначально отключить и больше не включать...
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34281461
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(`ykaНе стоит себе проблемы выдумывать - вставляй на клиенте Guid.NewGuid(). Как грица, если нет разницы, зачем платить больше?!Э-то не-серь-ез-но! (С) :) Политика предполагаемого проекта такая: вся логика поддерживается SQL-сервером, а приложение - всего лишь клиент для отображения картинки и взаимодействия с юзером. Так что если делать логику на сервере, то надо идти до конца - и идентификаторы генерить должен он. Процедуры обеспечивают интерфейс работы с данными и они должны быть логически законченными сами по себе.
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34281626
Фотография (`yka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему, вполне серьезно. Обычно делают уникальные ключи на основе identity-колонок или GUID. В первом случае, в DataTable делают для соответсвующей колонки
AutoIncrement = true;
AutoIncrementSeed = -1;
AutoIncrementStep = -1;
с подтягиванием сгенерированного сервером значения при отработке команд на втавку на сервере
(типа DA.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord)
А во втором случае вообще проблем нет, ибо GUID сохраняет свою уникальность. И политика проекта в данном случае не при делах - это политика primary key в реляционной БД.
Другое дело, когда ключ создается солгасно особой логике и не укладывается в эти рамки. Тогда, чес говоря, даже не представляю, как доставать на клиента сгенерированный сервером ключ для корректной работы группы команд, работающих с некоторой записью. Только - вставил и забыл.



─────────
∙ Иногда решительный шаг вперед - результат хорошего пинка сзади ∙
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34281702
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если я сказал, что вариант отпадает - зачем продолжать меня уговаривать? :)
Я могу привести массу аргументов - SQL-код писал не я (я всего лишь разместил объяву (С) ) и не мне решать, каким он должен быть. Мое дело - написание клиента. Изначально неважно в чем. Под процедуры, написанные в таком стиле, замечательно делается клиент, скажем, на Делфях. Но я хотел именно на .NET. Поэтому, дабы убедить SQL-писателя, что клиент на .NET - это уместно, я не должен канючить "перепиши процедуры... перепиши процедуры...", иначе буду послан... в сторону тех же Делфей :)
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34282875
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вставьте туда guid сгенерённый на клиенте... А потом от сервера заберёте реальный...
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34286436
Sergey Molchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил это дело отключением констрейнтов, как советовали выше. Теперь ищу, каким образом все изменения заносить в базу немедленно. Вообще отказаться бы от датасетов, работать с одними command-ами...
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34289136
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем Вам DataSetы не нравятся? Они собственно для того сделаны, что бы к серверу по каждому движению мышью не обращаться...
По поводу "все изменения заносить в базу немедленно" - повесьте обработчик на событие DataTable.RowChanged и вызывайте из нее
серверную процедуру.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
ADO.NET 2: DataSet + хранимые процедуры
    #34289237
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey MolchanovВообще отказаться бы от датасетов, работать с одними command-ами...
А что мешает использовать command.ExecuteReader и возвращаемый им интерфейс IDataReader ?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.NET 2: DataSet + хранимые процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]