Хранимые процедуры SQL Server CE 3.5 SP1 - PullRequest
3 голосов
/ 17 февраля 2010

Мне было поручено взять существующее приложение WinForms и модифицировать его для работы в режиме «время от времени подключенного». Это должно было быть достигнуто с помощью SQL Server CE 3.5 на ноутбуке пользователя и синхронизации сервера и клиента либо посредством репликации слиянием SQL Server, либо с использованием Microsoft Sync Framework.

В настоящее время приложение подключается к нашему SQL Server и извлекает, вставляет, обновляет данные с использованием хранимых процедур. Я прочитал, что SQL Server CE не поддерживает хранимые процедуры.

Означает ли это, что все мои хранимые процедуры должны быть преобразованы в прямые операторы SQL, либо в моем коде, либо в виде запроса внутри адаптера таблицы?

Если это правда, каковы мои альтернативы?

Ответы [ 5 ]

3 голосов
/ 17 февраля 2010

Поскольку SQL Server CE считается «хранилищем данных приложения», предполагается, что любая сложная логика, которую вы обычно можете реализовать в хранимой процедуре SQL Server, будет реализована в самом приложении. Многие традиционные концепции баз данных не поддерживаются в SQL CE, такие как ограничения, закрывающие индексы, хранимые процедуры, пользовательские функции ... вы называете это, SQLCE не не имеет его!

Поскольку SQL CE является однопользовательским, это предположение более или менее имеет смысл; вам не нужно беспокоиться о проблемах параллелизма или атомарности, когда вы полностью контролируете все, что происходит на уровне БД. Это помогает не думать о SQL CE как о полноценной базе данных; это скорее альтернатива чему-то вроде SQLite или MS Access.

Ваши единственные варианты:

  • Перепишите приложение, чтобы оно работало по-другому (т. Е. Используйте простые запросы или прямой доступ к таблице) при работе в режиме «отключен»;

  • Запретить приложению выполнять более сложные операции, если оно не «подключено»;

  • Вместо этого перейдите на SQL Express, который занимает гораздо большую площадь, но поддерживает хранимые процедуры и большинство других достоинств SQL Server.

0 голосов
/ 19 июля 2011

На мой взгляд, вы можете создать отдельный класс в вашей базе данных, который можно оценить по уровню доступа к данным. Вы можете просто управлять сбором параметров в DAL и затем передавать их как объект в метод класса хранимых процедур, который будет вести себя как процедура хранилища SQL и генерировать запрос после конкатенации с нужными переменными.

После генерации скрипта он вернет Query, который затем может быть передан в SQL CE для извлечения результатов.

0 голосов
/ 27 мая 2010

Другая альтернатива - VistaDB .Он поддерживает T-SQL Procs и все те же типы данных, что и SQL Server (на самом деле больше, чем SQL CE).

Возможно, вы захотите взглянуть на этот пост SO о преимуществах VistaDB , чтобы узнать большеинформация.

0 голосов
/ 26 марта 2010

Другой вариант - использовать Linq для наборов данных. Он может «хранить» хранимые процедуры как методы для вас. Он не хранится в базе данных, но дает вам эту иллюзию (хотя все эти методы должны быть прикреплены к таблице и все же должны быть достаточно простыми)

0 голосов
/ 17 февраля 2010

Да, они не поддерживаются, и лучший способ - встроить их в параметризованные запросы в коде.Вы можете создать свой собственный фреймворк для доступа к ним как к хранимым процедурам с помощью enum, а затем хранить их в одном чистом месте кода.

Хотя, если вы планируете масштабировать sql compact вообще (внешние объединения нескольких таблицтысячи строк) вы захотите использовать наборы SqlCeResult и метод Seek.Это очень быстро, и вы можете даже открывать индексы напрямую и искать по ним.http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceresultset(VS.80).aspx

...