Как написать класс базы данных, который поддерживает параметризованные запросы - PullRequest
1 голос
/ 05 марта 2009

Я бывший классический программист ASP, а иногда и программист PHP, пишу свое первое приложение ASP.NET. Мне нравятся значительно улучшенные функции ADO.NET, но я чувствую необходимость написать класс базы данных. Частично я хочу объединить код, который фактически взаимодействует с базой данных, и частично я хочу уменьшить то, что кажется повторением.

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

Мой дизайн для класса заключался в том, чтобы иметь функцию Query () для выбора и функцию Execute () для вставки / обновления / удаления. (Не против иметь больше открытых функций, но не хотел забегать вперед.) Обе функции принимают строку SQL и SortedList для параметров. Можно было бы получить имя столбца, найдя имя параметра в строке SQL и посмотрев перед знаком равенства. Аналогично, довольно просто получить имя таблицы, когда запрос вставляется, обновляется или удаляется, потому что вы работаете только с одной таблицей за раз. Большая проблема заключается в выборе, потому что может быть одно или несколько объединений, внутренних выборок и т. Д.

Я направляюсь в неправильном направлении? Что-нибудь, о чем я не думаю, может сделать мою жизнь проще или сложнее? Кто-нибудь написал для этого класс на любом языке, который мог бы дать какой-нибудь совет?

Ответы [ 4 ]

5 голосов
/ 05 марта 2009

Не изобретай велосипед. Просмотрите nHibernate или LINQToSQL (или LINQToEntities ) для ваших потребностей ORM.

1 голос
/ 05 марта 2009

Я думаю, поскольку это ваш первый опыт работы с ASP.NET, вам было бы неплохо изучить Linq to SQL. Выполните некоторые учебные пособия , чтобы вы почувствовали, как это работает, прежде чем пытаться кодировать любые запросы Linq.

Единственными причинами, по которым я НЕ могу использовать Linq to SQL, является то, что вы не используете SQL Server (или вам необходимо поддерживать другие БД ни сейчас, ни в будущем), или вы не можете использовать среду выполнения .NET 3.5. по какой-то причине.

Удачи

1 голос
/ 05 марта 2009

Во-вторых, позвоню, чтобы найти проверенный и проверенный руль, который подойдет вам, особенно если это ваш первый набег в aspnet ... будет много чего, чтобы вы были заняты.

Добавил бы предложение для SubSonic , которое, возможно, немного легче, чем nHibernate, но это действительно зависит от характера вашего проекта, оба они являются отличными инструментами, и оба сэкономили мне месяцы работы за последние несколько лет.

0 голосов
/ 05 марта 2009

Мне кажется, что ваш "простой класс базы данных" скрывает слишком много деталей от классов, которые должны его использовать.

Я написал классы, которые содержат SqlCeEngine и предоставляют такие методы, как «LookupDescription (String Code)» ... Я думаю, что такой дизайн - это то, что вы должны изучить. И рассмотреть вопрос о LINQ. Он может предложить многое.

...