Показаны сообщения с ярлыком SQL Server. Показать все сообщения
Показаны сообщения с ярлыком SQL Server. Показать все сообщения

4 февраля 2011 г.

Как работать с таблицами БД из C#

Создайте таблицу в SQL Server. Откройте sql server management studio. В Object Explorer правой кнопкой на папке Tables - New Table. Откроется окно редактирования полей таблицы.

Если нет особых требований по типам данных, то для числовых используйте тип int, а для строковых nvarchar(N), где N - максимальное количество символов. Максимально N может быть равно 4000. Также можно указывать nvarchar(MAX).


Напротив каждого поля в конструкторе ставится отметка, допускающая неопределённые значения. Если это не противоречит вашим бизнес-процессам, в целях удобства сопровождения всегда снимайте эту метку, чтобы запретить неопределённые значения.

У каждой таблицы хотя бы одно поле должно быть помечено как первичный ключ. Первичный ключ позволяет однозначно определить строку в таблице, поэтому его значения не могут повторяться. В качестве такого ключа выбирается отдельный столбец с типом int или с типом uniqueidentifier. Критерии выбора можно посмотреть в этой заметке. Первичный ключ отмечается пиктограммой в виде золотого ключа.

После указания первичного ключа сохраните структуру таблицы (Ctrl+S), здесь вам будет предложено ввести название для неё.

В Visual Studio добавьте в свой проект Add - new item - LINQ to SQL classes. Откроется пока ещё пустая диаграмма с расширением dbml. Если диаграмма dbml будет называться NordmineDatabase, то соответствующий ей класс автоматически получит название NordmineDatabaseDataContext - имейте это в виду, когда будете придумывать ей имя.


Откройте окно server explorer. В нём нужно добавить вашу таблицу. Выберите data connections - add connection. Там нажмите кнопку refresh и выберите из выпадающего списка имя компьютера, на котором установлен sql server. После нажатия на ОК в окне server explorer появится древовидная структура всех элементов вашей БД. Выберите нужную таблицу и просто перетащите её на диаграмму dbml. Нажмите F5 (запуск) или F6 (компиляция без запуска), чтобы последние изменения в диаграмме стали доступны.


Теперь вы можете работать с этой таблицей при помощи linq из любого метода. Пример:
NordmineDatabaseDataContext context = new NordmineDatabaseDataContext();
List<Sale> Sales = (from s in context.Sales select s).ToList();
Здесь из таблицы sales выбираются все строки. На выходе получаем коллекцию из элементов Sale. При этом объект context.Sales и класс Sale со всеми членами были созданы автоматически.

Здесь из таблицы sales выбираются все строки. На выходе получаем коллекцию из элементов Sale. При этом объект context.Sales и класс Sale со всеми членами были созданы автоматически.

Разница между int и uniqueidentifier в sql server

Эти два типа рекомендуется использовать в качестве первичных ключей в БД. Чем же они отличаются?

Тип int в sql server соответствует типу Int32 в платформе .NEТ. id новой записи генерируется автоматически путём увеличения на 1 id предыдущей записи, если для этого поля указано IDENTITY(1,1). Следовательно, id новой записи становится известно только после добавления её в таблицу.

Тип uniqueidentifier соответствует типу Guid в платформе .NET (пример: "C59498EC-5E38-41BF-9160-1B86449E02CA"). Особенностью этого типа данных является то, что статистически невозможно существование двух одинаковых id в любой информационной системе. В .NET генерируется методом Guid.NewGuid(). Отсюда следует, что id новой записи становится известным ещё перед сохранением в БД.

Выводы. Используйте uniqueidentifier, если не предполагается показывать id пользователю, т.к. он сложнее для восприятия, но удобнее при разработке. Если же нужно показывать пользователю id, например, в адресной строке браузера, то используйте целочисленный тип, но для того, чтобы узнать id новой записи, придётся выполнить запрос в БД.