Приложения, которым разделили доменную логику от логики хранения данных, адаптируемы к любому виду источника данных (база данных или иначе) или UI (сеть или окна (или Linux и т.д.)) приложение.
Ваш в значительной степени всунутый Ваша база данных, которая не плоха, если Ваш с компанией, которая удовлетворена текущей системой баз данных Ваше использование. Однако, потому что базы данных развивают сверхурочное время могла бы быть новая система баз данных, которая является действительно аккуратной и новой, который Ваша компания хочет использовать. Что, если они хотели переключиться на метод веб-сервисов доступа к данным (как Сервис Ориентируемая архитектура когда-то делает). Вам, возможно, придется портировать Ваши хранимые процедуры повсеместно.
Также доменные логические краткие обзоры далеко UI, который может быть более важным в больших сложных системах, которые имеют когда-либо развитие UIs (особенно, когда они постоянно ищут больше клиентов).
кроме того, в то время как я соглашаюсь, что нет никакого категорического ответа на вопрос хранимых процедур по сравнению с доменной логикой. Я нахожусь в доменном логическом лагере (и я думаю, что они побеждают со временем), потому что я полагаю, что тщательно продуманные хранимые процедуры более трудно поддержать, чем тщательно продуманная доменная логика. Но это - целые другие дебаты
В отличие от того, что опубликовали другие, вы не можете использовать функции min ()
/ max ()
для эта проблема, поскольку эти функции не понимают структуру данных (массив), которые передаются. Эти функции работают только для элементов скалярного массива.
BEGIN EDIT
Причина использования min ()
и max ()
, кажется, дают правильный ответ. Это связано с преобразованием типов в целые числа, что является неопределенным поведением :
Поведение преобразования в целое число не определено для других типов. Не полагаться на любое наблюдаемое поведение, поскольку оно могут быть изменены без предварительного уведомления.
Мое утверждение выше о приведении типов было неверным. На самом деле min ()
и max ()
действительно работают с массивами, но не так, как они нужны OP. При использовании min ()
и max ()
с несколькими массивами или массивом массивов элементы сравниваются элемент за элементом слева направо:
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
/*
* first element compared to first element: 2 == 2
* second element compared to second element: 4 < 5
* first array is considered the min and is returned
*/
В переводе на проблему OP это показывает причина, по которой прямое использование min ()
и max ()
, кажется, дает правильный результат. Первыми элементами массивов являются значения id
, поэтому min ()
и max ()
будут сравнивать их первыми,
создан для этого.
Например:
SqlConnection conn = new SqlConnection(
"Data Source=(local);Initial Catalog=Northwind;Integrated Security=SSPI");
или
SqlConnection conn = new SqlConnection(
"Data Source=DatabaseServer; Initial Catalog=Northwind; User ID=YourUserID; Password=YourPassword");
conn.Open(); // opens the database connection
Изменить:
После выполнения всех ваших действий вы должны закрыть соединение с помощью
conn.Close();
Источник данных : идентифицирует сервер. Это может быть локальный компьютер, доменное имя компьютера или IP-адрес.
Исходный каталог : имя базы данных.
Встроенная безопасность : Установите значение SSPI, чтобы установить соединение с пользователем для входа в Windows
ID пользователя : имя пользователя, настроенное в SQL Server.
Пароль : пароль, соответствующий идентификатору пользователя SQL Server.
Для подключения к SQL Server Express вам не потребуется ничего, кроме System.Data
, которая является стандартной сборкой .NET. Просто используйте классы SqlXXX
, и все будет готово.
Однако писать обычный код ADO.NET очень утомительно, поэтому очень часто используют ORM или менее тяжелый преобразователь набора результатов, такой как как BLToolkit .
И, наконец, рассмотрите возможность использования SQL Server CE. Это полностью ACID-совместимый однофайловый встроенный механизм базы данных, который поддерживает практически все функции, которые вы можете ожидать от СУБД SQL.
Для того же можно использовать пространство имен ADO.Net и System.Data.SqlClient. Я посоветую вам использовать Entities framework (ORM). Ниже приведены ссылки для обзора Entity Framework
Я бы порекомендовал использовать Корпоративную библиотеку Microsoft Patterns & Practices . Вы могли бы специально использовать Блок приложения доступа к данным .
Выдержка из MSDN:
Блок приложения доступа к данным предоставляет следующие преимущества:
- Он использует функциональность, предоставляемую ADO.NET 2.0, и с его помощью вы можете использовать функциональность ADO.NET вместе с функциональность блока приложения.
- Это снижает потребность в написании шаблонного кода для выполнения стандартных задач.
- Это помогает поддерживать согласованные методы доступа к данным, как в рамках приложения и в масштабе всего предприятия.
- Это уменьшает трудности при изменении типа базы данных.
- Это освобождает разработчиков от изучения различных моделей программирования для разных типов баз данных.
- Это сокращает объем кода, который разработчики должны писать при переносе приложения к разным типам базы данных.
Я использовал этот метод в течение многих лет, и до сих пор он был очень успешным. Удачи!
В настоящее время самый простой способ подключиться к базе данных и выполнять запросы в C # это LinqToSQL . Это избавит вас от много головной боли по сравнению с использованием ADO-соединений "старой школы".
Конечно, вы можете просто использовать классы в System.Data.SqlClient, хотя большинство людей будет использовать ORM. Я использую LLBLGen Pro .