Вызов хранимых процедур - PullRequest
       8

Вызов хранимых процедур

1 голос
/ 03 октября 2008

У меня есть приложение c #, которое взаимодействует с базой данных только через хранимые процедуры. Я пробовал различные методы для вызова хранимых процедур. В корне находится класс SqlCommand, однако я бы хотел достичь нескольких вещей:

  • делает интерфейс между c # и sql более плавным, так что вызовы процедур больше похожи на вызовы функций c #
  • есть простой способ определить, вызывается ли данная хранимая процедура где-либо в коде.
  • делает создание вызова процедуры быстрым и простым.

Я исследовал различные пути. В одном из них у меня был проект, который с его структурой пространства имен отражал структуру имени хранимых процедур, таким образом я мог генерировать имя хранимой процедуры из имени класса, и я мог сказать, использовалась ли данная хранимая процедура. штрафуя его в дереве пространства имен. Какие еще впечатления?

Ответы [ 7 ]

5 голосов
/ 03 октября 2008

Вы должны попробовать LINQ to SQL .

4 голосов
/ 03 октября 2008

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

Я думаю, что зеркалировать SP в вашем приложении было бы ошибкой, поскольку, как правило, ваша реляционная модель не равна 1-1 с объектной моделью домена приложения.

Например, обычно у меня нет объектов приложения, которые представляют собой таблицы ссылок или другие артефакты проектирования и нормализации базы данных. Это коллекции объектов, которые содержатся или возвращаются другими объектами.

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

3 голосов
/ 03 октября 2008

Рассматривали ли вы использование Enterprise Library от MS ? Это позволяет легко вызывать хранимые процедуры. Я обычно устанавливаю класс для каждой базы данных, который предназначен только для вызова этих хранимых процедур. После этого вы можете получить нечто похожее на это (извините, это vb.net, а не c #):

Public Shared Function GetOrg(ByVal OrgID As Integer) As System.Data.DataSet
    Return db.ExecuteDataSet("dbo.cp_GetOrg", OrgID)
End Function

Где дБ определяется как:

Dim db As Microsoft.Practices.EnterpriseLibrary.Data.Database = DatabaseFactory.CreateDatabase()

Затем у вас есть эта единственная функция, которая используется для вызова хранимой процедуры. Затем вы можете найти свой код для этой функции.

1 голос
/ 03 октября 2008

При создании моего текущего продукта одним из инструментов, который я очень хотел реализовать, был класс базы данных (например, DatabaseFactory - только я не заботился об этом), который упростил бы мою разработку и удалил некоторые "ошибки". «. В этом классе я хотел иметь возможность вызывать хранимые процедуры как настоящие функции C #, используя отображение функции в sproc, например:

public int Call_MySproc (int paramOne, bool paramTwo, ref int outputParam)

{

... обработка параметров и вызов sproc здесь

}

Самая большая проблема, с которой вы сталкиваетесь при попытке сделать это, заключается в работе, необходимой для создания функций C #, которые реализуют вызовы sproc. К счастью, легко создать генератор кода для этого в T-SQL. Я начал с одного, созданного Полом Маккензи, а затем модифицировал его различными способами, чтобы генерировать код C # так, как я этого хотел.

Вы можете либо Google Пол Маккензи поискать его оригинальный генератор кода, либо, если вы хотите написать мне на mark -at- BSDIWeb.com, я соберу исходный код для моей библиотеки классов SQL и связанный генератор кода sproc и разместите его на нашем веб-сайте. Если я получу запрос или два, я опубликую его, а затем вернусь и отредактирую этот ответ, чтобы указать другим источникам также.

0 голосов
/ 03 октября 2008

Новая Entity Framework от Microsoft предоставляет именно то, что вы просите. EF обычно используется для создания прокси-классов для объектов базы данных, но многие люди не осознают, что он также создает прокси-методы для хранимых процедур (конечно, автоматически). Это позволяет вам использовать ваши SP так же, как если бы они были обычными вызовами методов.

Проверьте это!

0 голосов
/ 03 октября 2008

Хотя они не очень модные, мы используем Typed DataSets в качестве внешнего интерфейса для всех наших хранимых процедур.

0 голосов
/ 03 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...