Как вы встраиваете sql запросы в c # - PullRequest
7 голосов
/ 15 августа 2011

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

Параметры выглядят следующим образом:

  1. строковый литерал (const string query ="Select * From MyTable")
    • Плюсы: простой, короткий
    • Минусы: нет подсветки синтаксиса, беспорядок для длинных запросов
  2. Создать файл для каждого запроса в виде QueryName.sql
    • Плюсы: подсветка синтаксиса, точнее для больших, сложных запросов
    • Минусы: множество файлов для большого количества запросов (один запросможет быть медленнее читать запрос из файла содержимого?
  3. Любые другие идеи?

В качестве дополнительной мысли, есть ли способ легко сгенерироватьстрого типизированные определения классов из SQL-запросов?

Ответы [ 3 ]

21 голосов
/ 15 августа 2011

Другой вариант:

4: создайте файл для каждого запроса как QueryName.sql

, но сделайте его встроенным ресурсом в вашей сборке.Таким образом, у вас нет физических файлов на диске, но ваши SQL-запросы красиво спрятаны в их собственные файлы в вашем решении Visual Studio, и вы можете легко извлечь SQL-текст из этих встроенных ресурсов в ваши SqlCommand объекты.

Для начала ознакомьтесь с этими ресурсами:

2 голосов
/ 15 августа 2011

Почему бы просто не использовать Entity Framework или Linq-to-SQL

Если у вас есть таблица с именем Foos, вы получите код, подобный следующему:

using(var db = new MyEntityBase()){

    var selectedFoo = from foo in db.Foos
                      where foo.Bar > 4
                      select foo;
    //Do stuff
}

, которые по очереди переводятся в SQL как:

select * from Foos where Bar = 4

приведенный выше код C # строго типизирован, и платформа Entity создаст для вас все необходимые классы данных.

0 голосов
/ 15 августа 2011

Я бы пошел на любой ORM, как EF или Subsonic.

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